From a80872b60d730d76c4253e7c27eb735dfd13e635 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Tue, 25 Apr 2017 09:46:30 +0100 Subject: Fix checking if a procedure terminates for `for` loops. --- src/check_stmt.c | 6 ++---- 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; } -- cgit v1.2.3