From aba50b57ccc1158af1eed404576890dba129c297 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 20 Jan 2018 23:37:07 +0100 Subject: [PATCH] Add #clear method to ArrayLiteral/HashLiteral (#5265) --- src/compiler/crystal/macros.cr | 8 ++++++++ src/compiler/crystal/macros/methods.cr | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/compiler/crystal/macros.cr b/src/compiler/crystal/macros.cr index 0a1f6f44b159..be535eae83c3 100644 --- a/src/compiler/crystal/macros.cr +++ b/src/compiler/crystal/macros.cr @@ -542,6 +542,10 @@ module Crystal::Macros def splat(trailing_string : StringLiteral = nil) : MacroId end + # Similar to `Array#clear` + def clear : ArrayLiteral + end + # Similar to `Array#empty?` def empty? : BoolLiteral end @@ -625,6 +629,10 @@ module Crystal::Macros # A hash literal. class HashLiteral < ASTNode + # Similar to `Hash#clear` + def clear : HashLiteral + end + # Similar to `Hash#empty?` def empty? : BoolLiteral end diff --git a/src/compiler/crystal/macros/methods.cr b/src/compiler/crystal/macros/methods.cr index 0f1b1c813183..9aab80696554 100644 --- a/src/compiler/crystal/macros/methods.cr +++ b/src/compiler/crystal/macros/methods.cr @@ -753,6 +753,11 @@ module Crystal interpret_argless_method(method, args) { @of || Nop.new } when "type" interpret_argless_method(method, args) { @name || Nop.new } + when "clear" + interpret_argless_method(method, args) do + elements.clear + self + end else value = intepret_array_or_tuple_method(self, ArrayLiteral, method, args, block, interpreter) value || super @@ -837,6 +842,11 @@ module Crystal interpret_argless_method(method, args) { @of.try(&.value) || Nop.new } when "type" interpret_argless_method(method, args) { @name || Nop.new } + when "clear" + interpret_argless_method(method, args) do + entries.clear + self + end else super end