From 8510c74c21ddee9f0efea25b410594a334291aea Mon Sep 17 00:00:00 2001 From: Eric Chan Date: Wed, 25 Nov 2020 21:08:08 -0500 Subject: [PATCH] replace empty literal for empty array --- ext/liquid_c/parser.c | 7 ++++++- test/unit/expression_test.rb | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ext/liquid_c/parser.c b/ext/liquid_c/parser.c index 2e5c09f6..78210d7d 100644 --- a/ext/liquid_c/parser.c +++ b/ext/liquid_c/parser.c @@ -4,6 +4,7 @@ #include "usage.h" static VALUE empty_string; +static VALUE frozen_empty_array; static ID id_to_i, idEvaluate; void init_parser(parser_t *p, const char *str, const char *end) @@ -178,7 +179,7 @@ static VALUE try_parse_literal(parser_t *p) break; case 'e': if (memcmp(str, "empty", size) == 0) - result = empty_string; + result = frozen_empty_array; break; } break; @@ -272,5 +273,9 @@ void liquid_define_parser(void) empty_string = rb_utf8_str_new_literal(""); rb_global_variable(&empty_string); + + frozen_empty_array = rb_ary_new(); + rb_ary_freeze(frozen_empty_array); + rb_global_variable(&frozen_empty_array); } diff --git a/test/unit/expression_test.rb b/test/unit/expression_test.rb index 73e09a68..f9498644 100644 --- a/test/unit/expression_test.rb +++ b/test/unit/expression_test.rb @@ -9,8 +9,10 @@ def test_constant_literals assert_nil(Liquid::C::Expression.strict_parse('null')) empty = Liquid::C::Expression.strict_parse('empty') - assert_equal('', empty) - assert_same(empty, Liquid::C::Expression.strict_parse('blank')) + assert_equal([], empty) + + blank = Liquid::C::Expression.strict_parse('blank') + assert_equal('', blank) end def test_push_literals