diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-11 15:55:04 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-11 15:55:04 +0900 |
| commit | 13a542d48d5d86b866dbc4d6a4f0ec17bee49c12 (patch) | |
| tree | b73deac37c7cedb7f1b718a92ff71f21f97263dc /src/codegen.c | |
| parent | 8f020f28c6b5b9c64cbd66db8369f89809b20d0a (diff) | |
| download | mruby-13a542d48d5d86b866dbc4d6a4f0ec17bee49c12.tar.gz mruby-13a542d48d5d86b866dbc4d6a4f0ec17bee49c12.zip | |
zsuper should respect block given; close #185
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/codegen.c b/src/codegen.c index 117588b6e..105a27cef 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1280,7 +1280,7 @@ codegen(codegen_scope *s, node *tree, int val) { int n = 0; - push(); + push(); /* room for receiver */ if (tree) { node *args = tree->car; while (args) { @@ -1307,14 +1307,19 @@ codegen(codegen_scope *s, node *tree, int val) codegen_scope *s2 = s; int lv = 0, ainfo = 0; + push(); /* room for receiver */ while (s2->ainfo < 0) { lv++; s2 = s2->prev; if (!s2) break; } if (s2) ainfo = s2->ainfo; - push(); genop(s, MKOP_ABx(OP_ARGARY, cursp(), (ainfo<<4)|(lv & 0xf))); + if (tree && tree->cdr) { + push(); + codegen(s, tree->cdr, VAL); + pop_n(2); + } pop(); genop(s, MKOP_ABC(OP_SUPER, cursp(), 0, CALL_MAXARGS)); if (val) push(); |
