From c647dff1b25ab54ee1b6805cef1582e8175b43d7 Mon Sep 17 00:00:00 2001 From: fleuria Date: Fri, 25 Oct 2013 02:48:25 +0800 Subject: 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(). --- src/codegen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') 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); -- cgit v1.2.3