diff --git a/src/interpret.c b/src/interpret.c index 21e8fc6a94fdf43d1d6342f4ae6acb808ea7e425..0501236b4845faef5422219972b195ae574b40aa 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -875,7 +875,8 @@ static void eval_instruction(unsigned char *pc) CASE(F_RETURN_0); pop_n_elems(sp-fp->locals); - return; + push_int(0); + goto do_return; CASE(F_RETURN); if(fp->locals != sp-1) @@ -883,6 +884,13 @@ static void eval_instruction(unsigned char *pc) assign_svalue(fp->locals, sp-1); pop_n_elems(sp - fp->locals - 1); } + + do_return: +#if defined(DEBUG) && defined(GC2) + if(d_flag > 2) do_gc(); + check_signals(); +#endif + /* fall through */ CASE(F_DUMB_RETURN);