diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2026-02-26 00:18:24 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2026-02-26 00:18:24 +0200 |
| commit | cb22d6ede6440112acb555470508ae4fa58412ab (patch) | |
| tree | 5002ee35a7ea76455516a64eb541b699a2be4ae1 | |
| parent | 1570c08f967c6b68544f90ac59a3baec123073a1 (diff) | |
| download | fwd-cb22d6ede6440112acb555470508ae4fa58412ab.tar.gz fwd-cb22d6ede6440112acb555470508ae4fa58412ab.zip | |
fix occasional missing return
| -rw-r--r-- | src/lower.c | 13 |
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"); |
