]> granicus.if.org Git - jq/commitdiff
More constant folding: null, true, and false
authorNicolas Williams <nico@cryptonector.com>
Sun, 10 Aug 2014 00:05:15 +0000 (19:05 -0500)
committerNicolas Williams <nico@cryptonector.com>
Sun, 10 Aug 2014 00:15:50 +0000 (19:15 -0500)
    A step towards doing constant folding for arrays and objects.

builtin.c
parser.y

index 79f89af015f090c00d6b285765202c97f1026ff4..a526e40f393a3cc5f2a3aec2d820722148bab0ee 100644 (file)
--- 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()))}
     };
index 73fee5fa171727f02957ad84d3a6d9a2ca16543d..8fffb7cce6aa81e7631f62db66d14a2279aebd76 100644 (file)
--- 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 ')' {