diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-28 17:12:22 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-28 17:12:22 +0900 |
| commit | 9d56acb7092928d4c8c84e7af80eb3be8aaa2e4e (patch) | |
| tree | d465f9834fa45aa1f7f0dc5eb8047f178a7f81b0 /src/codegen.c | |
| parent | be122b73d35f20f44b5d220cd94a09918a33f121 (diff) | |
| download | mruby-9d56acb7092928d4c8c84e7af80eb3be8aaa2e4e.tar.gz mruby-9d56acb7092928d4c8c84e7af80eb3be8aaa2e4e.zip | |
wrong stack position for headless case; close #675
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/codegen.c b/src/codegen.c index c6afa0184..eefd9f045 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1205,6 +1205,7 @@ codegen(codegen_scope *s, node *tree, int val) pop(); genop(s, MKOP_ABC(OP_SEND, cursp(), new_msym(s, mrb_intern(s->mrb, "===")), 1)); } + pop(); tmp = new_label(s); genop(s, MKOP_AsBx(OP_JMPIF, cursp(), pos2)); pos2 = tmp; @@ -1215,7 +1216,6 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_sBx(OP_JMP, 0)); dispatch_linked(s, pos2); } - pop(); /* pop HEAD */ codegen(s, tree->car->cdr, val); if (val) pop(); tmp = new_label(s); @@ -1223,11 +1223,11 @@ codegen(codegen_scope *s, node *tree, int val) pos3 = tmp; if (pos1) dispatch(s, pos1); tree = tree->cdr; - push(); /* push HEAD */ } - pop(); /* pop HEAD */ - genop(s, MKOP_A(OP_LOADNIL, cursp())); - if (val) push(); + if (val) { + genop(s, MKOP_A(OP_LOADNIL, cursp())); + push(); + } if (pos3) dispatch_linked(s, pos3); } break; |
