NODE_SUPER should preserve stack region for block; ref #2136
authorYukihiro "Matz" Matsumoto <[email protected]>
Sun, 27 Apr 2014 00:22:35 +0000 (27 09:22 +0900)
committerYukihiro "Matz" Matsumoto <[email protected]>
Sun, 27 Apr 2014 00:22:35 +0000 (27 09:22 +0900)
src/codegen.c

index 6c2ed41..0cecc8d 100644 (file)
@@ -1688,6 +1688,7 @@ codegen(codegen_scope *s, node *tree, int val)
       }
       else {
         genop(s, MKOP_A(OP_LOADNIL, cursp()));
+        push(); pop();
       }
       pop_n(n+1);
       if (sendv) n = CALL_MAXARGS;
@@ -1709,12 +1710,12 @@ codegen(codegen_scope *s, node *tree, int val)
       }
       if (s2) ainfo = s2->ainfo;
       genop(s, MKOP_ABx(OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf)));
+      push(); push(); pop();    /* ARGARY pushes two values */
       if (tree && tree->cdr) {
-        push();
         codegen(s, tree->cdr, VAL);
-        pop_n(2);
+        pop();
       }
-      pop();
+      pop(); pop();
       genop(s, MKOP_ABC(OP_SUPER, cursp(), 0, CALL_MAXARGS));
       if (val) push();
     }