aboutsummaryrefslogtreecommitdiff
path: root/src/lower.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2026-02-26 00:18:24 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2026-02-26 00:18:24 +0200
commitcb22d6ede6440112acb555470508ae4fa58412ab (patch)
tree5002ee35a7ea76455516a64eb541b699a2be4ae1 /src/lower.c
parent1570c08f967c6b68544f90ac59a3baec123073a1 (diff)
downloadfwd-cb22d6ede6440112acb555470508ae4fa58412ab.tar.gz
fwd-cb22d6ede6440112acb555470508ae4fa58412ab.zip
fix occasional missing return
Diffstat (limited to 'src/lower.c')
-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");