From 1c0d930b1228f34d1d8ecda242a6eb8d99474e71 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Thu, 9 Nov 2017 14:34:10 +0100 Subject: [PATCH] Add #clear method to ArrayLiteral/HashLiteral --- 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 e4ad6a4a2fcc..2ee529a8f5de 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 @@ -621,6 +625,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 c2eed25c592f..e5347b0f8b4d 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