summaryrefslogtreecommitdiffhomepage
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
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().
-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);