Fix checking if a procedure terminates for for loops.

This commit is contained in:
Ginger Bill
2017-04-25 09:46:30 +01:00
parent 822bb51b55
commit a80872b60d
2 changed files with 5 additions and 4 deletions

View File

@@ -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);

View File

@@ -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;
}