From 9d56acb7092928d4c8c84e7af80eb3be8aaa2e4e Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Fri, 28 Dec 2012 17:12:22 +0900 Subject: wrong stack position for headless case; close #675 --- src/codegen.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/codegen.c') 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; -- cgit v1.2.3