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();
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)
| 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)));
{"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
#