From 8a561120c41969439f786ee133d7d699ee8edd1b Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Sat, 9 Aug 2014 19:05:15 -0500 Subject: [PATCH] More constant folding: null, true, and false A step towards doing constant folding for arrays and objects. --- builtin.c | 3 --- parser.y | 10 +++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/builtin.c b/builtin.c index 79f89af0..a526e40f 100644 --- a/builtin.c +++ b/builtin.c @@ -868,9 +868,6 @@ static block bind_bytecoded_builtins(block b) { { struct bytecoded_builtin builtin_defs[] = { {"empty", gen_op_simple(BACKTRACK)}, - {"false", gen_const(jv_false())}, - {"true", gen_const(jv_true())}, - {"null", gen_const(jv_null())}, {"not", gen_condbranch(gen_const(jv_false()), gen_const(jv_true()))} }; diff --git a/parser.y b/parser.y index 73fee5fa..8fffb7cc 100644 --- a/parser.y +++ b/parser.y @@ -638,7 +638,15 @@ FORMAT { jv_free($2); } | IDENT { - $$ = gen_location(@$, locations, gen_call(jv_string_value($1), gen_noop())); + const char *s = jv_string_value($1); + if (strcmp(s, "false") == 0) + $$ = gen_const(jv_false()); + else if (strcmp(s, "true") == 0) + $$ = gen_const(jv_true()); + else if (strcmp(s, "null") == 0) + $$ = gen_const(jv_null()); + else + $$ = gen_location(@$, locations, gen_call(s, gen_noop())); jv_free($1); } | IDENT '(' Args ')' {