diff options
| author | 2022-08-20 06:35:05 +0200 | |
|---|---|---|
| committer | 2022-08-20 06:47:17 +0200 | |
| commit | df41a4512932f1312e4725d0409757a683b091ed (patch) | |
| tree | 5a87b358529fb2fe92eefa6d4f47e0ac78b4d131 /bootstrap/cgen.c | |
| parent | 19acdd751963e88b6e75693f947b1b1fd2912f11 (diff) | |
defer fix
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("}"); } } |