summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authormattn <[email protected]>2013-01-10 10:04:07 +0900
committermattn <[email protected]>2013-01-10 10:04:07 +0900
commitee0f73a46a17411f6dfc88163bf5d76241932a48 (patch)
tree00c9c8bd8346598b6f2e2e0a608f376197f656c8 /src/codegen.c
parentef4b0c6cd3442598169dad9e6861d3c2db271f58 (diff)
parent5804e7682ecbd59c1a9cea56c9ad008cff206713 (diff)
downloadmruby-ee0f73a46a17411f6dfc88163bf5d76241932a48.tar.gz
mruby-ee0f73a46a17411f6dfc88163bf5d76241932a48.zip
Merge branch 'master' of https://github.com/mruby/mruby
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/codegen.c b/src/codegen.c
index c1a62320d..246101f24 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1106,18 +1106,24 @@ codegen(codegen_scope *s, node *tree, int val)
if (e) {
if (val) pop();
pos2 = new_label(s);
- genop(s, MKOP_sBx(OP_JMP, 0));
- dispatch(s, pos1);
+ genop(s, MKOP_sBx(OP_JMP, 0));
+ dispatch(s, pos1);
codegen(s, e, val);
dispatch(s, pos2);
}
else {
if (val) {
pop();
+ pos2 = new_label(s);
+ genop(s, MKOP_sBx(OP_JMP, 0));
+ dispatch(s, pos1);
genop(s, MKOP_A(OP_LOADNIL, cursp()));
+ dispatch(s, pos2);
push();
}
- dispatch(s, pos1);
+ else {
+ dispatch(s, pos1);
+ }
}
}
break;