summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorfleuria <[email protected]>2013-10-25 02:48:25 +0800
committerfleuria <[email protected]>2013-10-25 02:48:25 +0800
commitc647dff1b25ab54ee1b6805cef1582e8175b43d7 (patch)
tree7a888fabc382c37eafa86181b2c0d249ec4a77a7 /src
parenta230a88e8994f7be0256e552d5ea186adec7222f (diff)
downloadmruby-c647dff1b25ab54ee1b6805cef1582e8175b43d7.tar.gz
mruby-c647dff1b25ab54ee1b6805cef1582e8175b43d7.zip
fix #1544
We have already reserved that register in codegen()'s case NODE_DEF, but what we care about is actually the previous register. So what we need is get that register by cursp() after pop(), then recover the reservation by push().
Diffstat (limited to 'src')
-rw-r--r--src/codegen.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/codegen.c b/src/codegen.c
index bb479842c..578fb96ac 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -646,7 +646,9 @@ scope_body(codegen_scope *s, node *tree)
genop(scope, MKOP_AB(OP_RETURN, 0, OP_R_NORMAL));
}
else {
- genop_peep(scope, MKOP_AB(OP_RETURN, scope->sp, OP_R_NORMAL), NOVAL);
+ pop();
+ genop_peep(scope, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL);
+ push();
}
}
scope_finish(scope);