aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lower.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lower.c b/src/lower.c
index 454cddd..3ed8f49 100644
--- a/src/lower.c
+++ b/src/lower.c
@@ -753,8 +753,13 @@ static int lower_stmt(struct state *state, struct ast *stmt, bool last)
case AST_EXPLODE: return lower_explode(state, stmt, last);
case AST_LET: return lower_let(state, stmt, last);
case AST_WRITE: return lower_write(state, stmt);
- case AST_FORGET: break;
- case AST_EMPTY: break;
+ case AST_FORGET:
+ case AST_EMPTY:
+ if (last) {
+ indent(state);
+ fprintf(state->code, "return stack;\n");
+ }
+ break;
default:
internal_error("unhandled statement kind %s", ast_str(stmt->k));
abort();
@@ -1141,10 +1146,6 @@ static int lower_proc(struct state *state, struct ast *proc)
struct ast *block = proc_body(proc);
ret = lower_stmt_list(&new_state, block_body(block), true);
- /* in case nothing else has returned */
- indent(&new_state);
- fprintf(new_state.code, "return stack;\n");
-
fprintf(new_state.code, "}\n\n");
fprintf(new_state.ctx, "};\n\n");