aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/cgen.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-20 06:35:05 +0200
committerlemon <lsof@mailbox.org>2022-08-20 06:47:17 +0200
commitdf41a4512932f1312e4725d0409757a683b091ed (patch)
tree5a87b358529fb2fe92eefa6d4f47e0ac78b4d131 /bootstrap/cgen.c
parent19acdd751963e88b6e75693f947b1b1fd2912f11 (diff)
defer fix
Diffstat (limited to 'bootstrap/cgen.c')
-rw-r--r--bootstrap/cgen.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c
index 94ae420..5fae699 100644
--- a/bootstrap/cgen.c
+++ b/bootstrap/cgen.c
@@ -488,6 +488,14 @@ genblock(struct blockstmt block) {
pri("{\n");
for (int i = 0; i < block.stmts.n; ++i)
genstmt(&block, &block.stmts.d[i]);
+ for (struct defer* defer = block.defers; defer; defer = defer->next) {
+ if (defer->blockid != block.id)
+ continue;
+ const char *p = fileid2path(defer->ex.span.fileid);
+ pri("\n#line %d %S\n", defer->ex.span.line, p, (u64)strlen(p));
+ genexpr(&defer->ex);
+ pri(";\n");
+ }
pri("}\n");
}
@@ -699,15 +707,7 @@ genfn(bool externp, const char *cname, struct fn *fn) {
if (!fn->body) {
pri(";\n");
} else {
- pri("{");
genblock(fn->body->block);
- for (struct defer* defer = fn->body->block.defers; defer; defer = defer->next) {
- const char *p = fileid2path(defer->ex.span.fileid);
- pri("\n#line %d %S\n", defer->ex.span.line, p, (u64)strlen(p));
- genexpr(&defer->ex);
- pri(";\n");
- }
- pri("}");
}
}