diff options
Diffstat (limited to 'src')
| -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"); |
