codegen.c: stack position may be wrong on assignments.

When `[]=` access includes keyword arguments.
parent 4c13188e
...@@ -1865,15 +1865,21 @@ gen_assignment(codegen_scope *s, node *tree, node *rhs, int sp, int val) ...@@ -1865,15 +1865,21 @@ gen_assignment(codegen_scope *s, node *tree, node *rhs, int sp, int val)
} }
} }
if (tree->cdr->car) { /* keyword arguments */ if (tree->cdr->car) { /* keyword arguments */
if (n == 14) {
pop_n(n);
genop_2(s, OP_ARRAY, cursp(), n);
push();
n = 15;
}
gen_hash(s, tree->cdr->car->cdr, VAL, 0); gen_hash(s, tree->cdr->car->cdr, VAL, 0);
if (n < 14) { if (n < 14) {
n++; n++;
push();
} }
else { else {
pop(); pop_n(2);
genop_2(s, OP_ARYPUSH, cursp(), 1); genop_2(s, OP_ARYPUSH, cursp(), 1);
} }
push();
} }
} }
if (rhs) { if (rhs) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment