diff options
| author | fleuria <[email protected]> | 2013-10-25 02:48:25 +0800 |
|---|---|---|
| committer | fleuria <[email protected]> | 2013-10-25 02:48:25 +0800 |
| commit | c647dff1b25ab54ee1b6805cef1582e8175b43d7 (patch) | |
| tree | 7a888fabc382c37eafa86181b2c0d249ec4a77a7 | |
| parent | a230a88e8994f7be0256e552d5ea186adec7222f (diff) | |
| download | mruby-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.c | 4 |
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); |
