From a88d53d2fda9a755c9c972a09a1206d54ca0d8b2 Mon Sep 17 00:00:00 2001 From: Stephen Dolan Date: Mon, 3 Dec 2012 20:31:40 +0000 Subject: [PATCH] Extend `{foo}` syntax to allow `{"foo"}` as well. Useful when "foo" contains unusual characters. Should help with the issues #7, #38, #40, #42. --- execute.c | 11 +++++++++++ opcode_list.h | 1 + parser.y | 4 ++++ testdata | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/execute.c b/execute.c index 8fadc7e..8b8036a 100644 --- a/execute.c +++ b/execute.c @@ -208,6 +208,17 @@ jv jq_next() { break; } + case DUP2: { + stackval keep = stack_pop(); + stackval v = stack_pop(); + stackval v2 = v; + v2.value = jv_copy(v.value); + stack_push(v); + stack_push(keep); + stack_push(v2); + break; + } + case SWAP: { stackval a = stack_pop(); stackval b = stack_pop(); diff --git a/opcode_list.h b/opcode_list.h index a39d30e..03cdbc8 100644 --- a/opcode_list.h +++ b/opcode_list.h @@ -1,5 +1,6 @@ OP(LOADK, CONSTANT, 1, 1) OP(DUP, NONE, 1, 2) +OP(DUP2, NONE, 2, 3) OP(SWAP, NONE, 2, 2) OP(POP, NONE, 1, 0) OP(LOADV, VARIABLE, 1, 1) diff --git a/parser.y b/parser.y index cee3c9d..e3d32e4 100644 --- a/parser.y +++ b/parser.y @@ -414,6 +414,10 @@ MkDictPair | String ':' ExpD { $$ = gen_dictpair($1, $3); } +| String { + $$ = gen_dictpair($1, BLOCK(gen_op_simple(POP), gen_op_simple(DUP2), + gen_op_simple(DUP2), gen_op_simple(INDEX))); + } | IDENT { $$ = gen_dictpair(gen_const(jv_copy($1)), gen_index(gen_noop(), gen_const($1))); diff --git a/testdata b/testdata index cc8263b..088d255 100644 --- a/testdata +++ b/testdata @@ -64,6 +64,10 @@ null {"a":1, "b":2, "c":3, "d":"c"} {"a":1, "b":2, "c":1, "e":2} +{"a",b,"a$\(1+1)"} +{"a":1, "b":2, "c":3, "a$2":4} +{"a":1, "b":2, "a$2":4} + # # Field access, piping # -- 2.40.0