]> granicus.if.org Git - jq/commitdiff
Keywords should be OK as object keys (fix #794)
authorNicolas Williams <nico@cryptonector.com>
Mon, 25 May 2015 18:16:45 +0000 (13:16 -0500)
committerNicolas Williams <nico@cryptonector.com>
Mon, 25 May 2015 18:34:07 +0000 (13:34 -0500)
With this change it's now OK to use keywords as object keys like so:

    {if:0}

parser.y
tests/all.test

index 00d097c97b039ab5b84dd9e4d01784fa7b9bb151..029b879d61dff2da9082d5a7f6c583df2ed05567 100644 (file)
--- a/parser.y
+++ b/parser.y
@@ -108,6 +108,7 @@ struct lexer_param;
 %type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString
 %type <blk> FuncDef FuncDefs String Import Imports Param Params
 %type <blk> Arg Args Module
+%type <literal> Keyword
 %{
 #include "lexer.h"
 struct lexer_param {
@@ -735,6 +736,62 @@ Exp {
   $$ = gen_lambda($1);
 }
 
+Keyword:
+"as" {
+  $$ = jv_string("as");
+} |
+"def" {
+  $$ = jv_string("def");
+} |
+"module" {
+  $$ = jv_string("module");
+} |
+"import" {
+  $$ = jv_string("import");
+} |
+"if" {
+  $$ = jv_string("if");
+} |
+"then" {
+  $$ = jv_string("then");
+} |
+"else" {
+  $$ = jv_string("else");
+} |
+"elif" {
+  $$ = jv_string("elif");
+} |
+"reduce" {
+  $$ = jv_string("reduce");
+} |
+"foreach" {
+  $$ = jv_string("foreach");
+} |
+"end" {
+  $$ = jv_string("end");
+} |
+"and" {
+  $$ = jv_string("and");
+} |
+"or" {
+  $$ = jv_string("or");
+} |
+"try" {
+  $$ = jv_string("try");
+} |
+"catch" {
+  $$ = jv_string("catch");
+} |
+"label" {
+  $$ = jv_string("label");
+} |
+"break" {
+  $$ = jv_string("break");
+} |
+"__loc__" {
+  $$ = jv_string("__loc__");
+}
+
 MkDict:
 %empty { 
   $$=gen_noop(); 
@@ -743,10 +800,13 @@ MkDict:
 | MkDictPair ',' MkDict { $$=block_join($1, $3); }
 | error ',' MkDict { $$ = $3; }
 
-MkDictPair
-IDENT ':' ExpD { 
+MkDictPair:
+IDENT ':' ExpD { 
   $$ = gen_dictpair(gen_const($1), $3);
  }
+| Keyword ':' ExpD {
+  $$ = gen_dictpair(gen_const($1), $3);
+  }
 | String ':' ExpD {
   $$ = gen_dictpair($1, $3);
   }
index 950801ab3bbc7b38c6bc62a084259109ba649f07..0511597a105cc9d5968d09bd53a3c1281698282a 100644 (file)
@@ -1185,3 +1185,7 @@ try join(",") catch .
 ["1","2",{"a":{"b":{"c":33}}}]
 "string (\",\") and object ({\"a\":{\"b\":{...) cannot be added"
 
+{if:0,and:1,or:2,then:3,else:4,elif:5,end:6,as:7,def:8,reduce:9,foreach:10,try:11,catch:12,label:13,import:14,module:15}
+null
+{"if":0,"and":1,"or":2,"then":3,"else":4,"elif":5,"end":6,"as":7,"def":8,"reduce":9,"foreach":10,"try":11,"catch":12,"label":13,"import":14,"module":15}
+