diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-04-25 09:46:30 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-04-25 09:46:30 +0100 |
| commit | a80872b60d730d76c4253e7c27eb735dfd13e635 (patch) | |
| tree | ba27c107ed092a2184bdd751190fb5ba9f2bd7c9 | |
| parent | 822bb51b55bc62f9d406db80e9d5a71d3a300a19 (diff) | |
Fix checking if a procedure terminates for `for` loops.
| -rw-r--r-- | src/check_stmt.c | 6 | ||||
| -rw-r--r-- | src/parser.c | 3 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/check_stmt.c b/src/check_stmt.c index 8b64ef30f..f34c4c837 100644 --- a/src/check_stmt.c +++ b/src/check_stmt.c @@ -125,15 +125,13 @@ bool check_is_terminating(AstNode *node) { case_end; case_ast_node(fs, ForStmt, node); - if (!check_has_break(fs->body, true)) { + if (fs->cond == NULL && !check_has_break(fs->body, true)) { return check_is_terminating(fs->body); } case_end; case_ast_node(rs, RangeStmt, node); - if (!check_has_break(rs->body, true)) { - return check_is_terminating(rs->body); - } + return false; case_end; case_ast_node(ms, MatchStmt, node); diff --git a/src/parser.c b/src/parser.c index 277d4069c..962a04afd 100644 --- a/src/parser.c +++ b/src/parser.c @@ -17,6 +17,8 @@ typedef enum ParseFileError { typedef Array(AstNode *) AstNodeArray; +gb_global i32 global_file_id = 0; + typedef struct AstFile { i32 id; gbArena arena; @@ -3639,6 +3641,7 @@ ParseFileError init_ast_file(AstFile *f, String fullpath) { gb_arena_init_from_allocator(&f->arena, heap_allocator(), arena_size); f->curr_proc = NULL; + f->id = ++global_file_id; return ParseFile_None; } |