diff options
Diffstat (limited to 'bootstrap/cgen.c')
| -rw-r--r-- | bootstrap/cgen.c | 16 |
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("}"); } } |