diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2020-05-10 14:58:42 -0400 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2020-05-10 14:58:42 -0400 |
commit | fcf0174ce10900f7f5ed6547382e0912d6a291b3 (patch) | |
tree | 433830b47945f256052566ed640afe6e2de3f632 | |
parent | 10aea299fe118d852962e71f1a0e6a23b6105562 (diff) |
fixed that namespace problem
-rw-r--r-- | test.toc | 12 | ||||
-rw-r--r-- | tests/control_flow.toc | 2 | ||||
-rw-r--r-- | tests/defer.toc | 2 | ||||
-rw-r--r-- | types.c | 7 |
4 files changed, 9 insertions, 14 deletions
@@ -1,4 +1,3 @@ -/* #include "std/io.toc", io; #include "std/base.toc", base; @@ -14,14 +13,3 @@ main ::= fn() { io.file_writes(&io.std_err, "something went wrong!\n"); } main(); -*/ - -a ::= nms { - #if 1 { - test ::= 0x501; - foo ::= fn() { - test; - } - } -} - diff --git a/tests/control_flow.toc b/tests/control_flow.toc index 043d4b7..f54a8bc 100644 --- a/tests/control_flow.toc +++ b/tests/control_flow.toc @@ -8,7 +8,7 @@ f ::= fn() int { if i == 7 { break; } } i := 0; - while { + while true { i += 1; total += i; if i == 10 { diff --git a/tests/defer.toc b/tests/defer.toc index ec06a19..07ef9f7 100644 --- a/tests/defer.toc +++ b/tests/defer.toc @@ -50,7 +50,7 @@ main ::= fn() { } } i := 0; - while { + while true { defer io.puts("deferred from while"); i += 1; io.puti(i); @@ -3601,6 +3601,7 @@ static Status types_decl(Typer *tr, Declaration *d) { static Status fix_ident_decls_inline_block(Typer *tr, Statement *stmts) { Identifiers *idents = typer_get_idents(tr); arr_foreach(stmts, Statement, s) { + assert(!(s->flags & STMT_TYPED)); if (s->kind == STMT_DECL) { Declaration *d = s->decl; arr_foreach(d->idents, Identifier, ident) { @@ -3675,6 +3676,12 @@ static Status types_stmt(Typer *tr, Statement *s) { s->inline_block = true_block->stmts; if (!fix_ident_decls_inline_block(tr, s->inline_block)) return false; + /* + erase identifiers in old block - we don't want anyone to think that + stuff is actually declared in the old block. + this isn't ideal, but oh well + */ + idents_create(&true_block->idents, tr->allocr, true_block); bool success = true; arr_foreach(s->inline_block, Statement, sub) { if (!types_stmt(tr, sub)) { |