codegen.c: skip `OP_ARGARY` before `super` if the method has no arguments.

parent a1027812
...@@ -2853,6 +2853,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -2853,6 +2853,7 @@ codegen(codegen_scope *s, node *tree, int val)
if (s2 && s2->ainfo > 0) { if (s2 && s2->ainfo > 0) {
ainfo = s2->ainfo; ainfo = s2->ainfo;
} }
if (ainfo > 0) {
genop_2S(s, OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf)); genop_2S(s, OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf));
push(); push(); push(); /* ARGARY pushes 3 values at most */ push(); push(); push(); /* ARGARY pushes 3 values at most */
pop(); pop(); pop(); pop(); pop(); pop();
...@@ -2866,6 +2867,17 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -2866,6 +2867,17 @@ codegen(codegen_scope *s, node *tree, int val)
push(); push();
codegen(s, tree->cdr->cdr, VAL); codegen(s, tree->cdr->cdr, VAL);
} }
}
else {
/* block argument */
if (tree && tree->cdr && tree->cdr->cdr) {
codegen(s, tree->cdr->cdr, VAL);
}
else {
gen_blkmove(s, 0, lv);
}
n = 0;
}
s->sp = sp; s->sp = sp;
genop_2(s, OP_SUPER, cursp(), n); genop_2(s, OP_SUPER, cursp(), n);
if (val) push(); if (val) push();
......
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