Add error messages when file not found + error position

This commit is contained in:
Krzosa Karol
2022-06-18 09:58:48 +02:00
parent 3ba8bd08fb
commit 499faac256
5 changed files with 19 additions and 16 deletions

View File

@@ -510,8 +510,8 @@ ast_module_namespace(Token *pos, Ast_Module *module, Intern_String name){
} }
function Ast_Module * function Ast_Module *
ast_module(Intern_String filename){ ast_module(Token *pos, Intern_String filename){
AST_NEW(Module, MODULE, 0, 0); AST_NEW(Module, MODULE, pos, 0);
result->parent_scope = 0; result->parent_scope = 0;
result->kind = AST_MODULE; result->kind = AST_MODULE;
result->name = filename; result->name = filename;

View File

@@ -597,11 +597,13 @@ gen_ast(Ast *ast){
function void function void
parse_file(Ast_File *file){ parse_file(Ast_File *file){
assert(file);
Scratch scratch; Scratch scratch;
file->filecontent = os_read_file(pctx->perm, file->filename.s); file->filecontent = os_read_file(pctx->perm, file->filename.s);
assert(file); if(file->filecontent.len == 0){
assert(file->filecontent.len); compiler_error(file->pos, "Failed to open file \"%Q\"", file->filename);
assert(file->filename.len); }
pctx->currently_parsed_file = file; pctx->currently_parsed_file = file;
@@ -685,7 +687,7 @@ parse_all_modules(){
} }
function Ast_Module * function Ast_Module *
add_module(Intern_String filename){ add_module(Token *pos, Intern_String filename){
For(pctx->modules){ For(pctx->modules){
if(it->name == filename){ if(it->name == filename){
log_info("Returning registered module: %Q\n", filename); log_info("Returning registered module: %Q\n", filename);
@@ -694,8 +696,8 @@ add_module(Intern_String filename){
} }
log_info("Adding module: %Q\n", filename); log_info("Adding module: %Q\n", filename);
Ast_Module *result = ast_module(filename); Ast_Module *result = ast_module(pos, filename);
register_ast_file(result->name, result, true); register_ast_file(pos, result->name, result, true);
pctx->modules.add(result); pctx->modules.add(result);
return result; return result;
} }

View File

@@ -4,7 +4,7 @@ struct Ast_File_Namespace;
struct Ast_File; struct Ast_File;
struct Ast_Module; struct Ast_Module;
struct Ast_Type; struct Ast_Type;
function Ast_Module *ast_module(Intern_String filename); function Ast_Module *ast_module(Token *pos, Intern_String filename);
function void insert_builtin_types_into_scope(Ast_Scope *p); function void insert_builtin_types_into_scope(Ast_Scope *p);
enum Token_Kind{ enum Token_Kind{
@@ -246,7 +246,7 @@ parse_init(Parse_Ctx *ctx, Allocator *perm_allocator, Allocator *heap_allocator)
arena_init(&ctx->stage_arena, "Compiler stage arena"_s); arena_init(&ctx->stage_arena, "Compiler stage arena"_s);
lex_init(ctx->perm, ctx->heap, ctx); lex_init(ctx->perm, ctx->heap, ctx);
ctx->builtins = ast_module(ctx->intern("builtins"_s)); ctx->builtins = ast_module(0, ctx->intern("builtins"_s));
insert_builtin_types_into_scope((Ast_Scope *)ctx->builtins); insert_builtin_types_into_scope((Ast_Scope *)ctx->builtins);
init_type(); init_type();

View File

@@ -176,8 +176,8 @@ int main(int argument_count, char **arguments){
F64 total_time = os_time(); F64 total_time = os_time();
begin_compilation(); begin_compilation();
Ast_Module *module = add_module(pctx->intern(program_name)); Ast_Module *module = add_module(0, pctx->intern(program_name));
parse_all_modules(); parse_all_modules();
assert(module); assert(module);
resolve_everything_in_module(module); resolve_everything_in_module(module);

View File

@@ -671,7 +671,7 @@ add_implicit_import(Ast_Scope *scope, Ast_Scope *add){
} }
function Ast_File * function Ast_File *
register_ast_file(Intern_String filename, Ast_Module *module, B32 global_implicit_load){ register_ast_file(Token *pos, Intern_String filename, Ast_Module *module, B32 global_implicit_load){
Ast_File *file = 0; Ast_File *file = 0;
For(module->all_loaded_files){ For(module->all_loaded_files){
if(it->filename == filename){ if(it->filename == filename){
@@ -691,6 +691,7 @@ register_ast_file(Intern_String filename, Ast_Module *module, B32 global_implici
file->decls = {pctx->heap}; file->decls = {pctx->heap};
file->implicit_imports = {pctx->heap}; file->implicit_imports = {pctx->heap};
file->module->all_loaded_files.add(file); file->module->all_loaded_files.add(file);
file->pos = pos;
} }
if(global_implicit_load) { if(global_implicit_load) {
@@ -703,15 +704,15 @@ register_ast_file(Intern_String filename, Ast_Module *module, B32 global_implici
function Ast_File * function Ast_File *
parse_load(B32 global_implicit_load){ parse_load(B32 global_implicit_load){
Token *file = token_expect(TK_StringLit); Token *file = token_expect(TK_StringLit);
Ast_File *result = register_ast_file(file->intern_val, pctx->currently_parsed_file->module, global_implicit_load); Ast_File *result = register_ast_file(file, file->intern_val, pctx->currently_parsed_file->module, global_implicit_load);
return result; return result;
} }
function Ast_Module *add_module(Intern_String filename); function Ast_Module *add_module(Token *pos, Intern_String filename);
function Ast_Module * function Ast_Module *
parse_import(B32 global_implicit_import){ parse_import(B32 global_implicit_import){
Token *file = token_expect(TK_StringLit); Token *file = token_expect(TK_StringLit);
Ast_Module *result = add_module(file->intern_val); Ast_Module *result = add_module(file, file->intern_val);
if(global_implicit_import){ if(global_implicit_import){
add_implicit_import(pctx->currently_parsed_file->module, result); add_implicit_import(pctx->currently_parsed_file->module, result);
} }