diff --git a/src/parser.cpp b/src/parser.cpp index 59d02090e..2f59d736c 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -5320,6 +5320,7 @@ ParseFileError process_imported_file(Parser *p, ImportedFile const &imported_fil TokenPos err_pos = {0}; ParseFileError err = init_ast_file(file, fi->fullpath, &err_pos); err_pos.file = fi->fullpath; + file->last_error = err; if (err != ParseFile_None) { if (err == ParseFile_EmptyFile) { @@ -5426,6 +5427,18 @@ ParseFileError parse_packages(Parser *p, String init_filename) { } } + for (isize i = p->packages.count-1; i >= 0; i--) { + AstPackage *pkg = p->packages[i]; + for (isize j = pkg->files.count-1; j >= 0; j--) { + AstFile *file = pkg->files[j]; + if (file->error_count != 0) { + if (file->last_error != ParseFile_None) { + return file->last_error; + } + return ParseFile_GeneralError; + } + } + } return ParseFile_None; } diff --git a/src/parser.hpp b/src/parser.hpp index cd0d59a48..da363bee9 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -41,6 +41,7 @@ enum ParseFileError { ParseFile_Permission, ParseFile_NotFound, ParseFile_InvalidToken, + ParseFile_GeneralError, ParseFile_Count, }; @@ -102,10 +103,11 @@ struct AstFile { Array imports; // 'import' isize directive_count; - Ast * curr_proc; - isize error_count; - f64 time_to_tokenize; // seconds - f64 time_to_parse; // seconds + Ast * curr_proc; + isize error_count; + ParseFileError last_error; + f64 time_to_tokenize; // seconds + f64 time_to_parse; // seconds bool is_test;