diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-27 09:22:35 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-27 09:22:35 +0900 |
| commit | bbc237044d0fb1792dff8c5d2466f4e644821239 (patch) | |
| tree | a8481231d1fe17d1ac09251b8e75bae34ddf6001 /src | |
| parent | 26758d89bd1bd05b5fbf2ac38a26aaf88009b57b (diff) | |
| download | mruby-bbc237044d0fb1792dff8c5d2466f4e644821239.tar.gz mruby-bbc237044d0fb1792dff8c5d2466f4e644821239.zip | |
NODE_SUPER should preserve stack region for block; ref #2136
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/codegen.c b/src/codegen.c index 6c2ed41c9..0cecc8d28 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -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(); } |
