From 2957f007e34ed7e2704a40c9e7af9148aebcdf23 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Sun, 18 Jun 2017 17:35:27 +0100 Subject: [PATCH] Fix #location for anonymous procedures --- core/_preload.odin | 12 +++++++++--- src/ir.cpp | 7 +++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/core/_preload.odin b/core/_preload.odin index e9b387bba..0da7a8134 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -200,9 +200,10 @@ proc make_source_code_location(file: string, line, column: i64, procedure: strin const DEFAULT_ALIGNMENT = align_of([vector 4]f32); -proc __check_context() { - var c = &__context; - +proc __init_context(c: ^Context) { + if c == nil { + return; + } if c.allocator.procedure == nil { c.allocator = default_allocator(); } @@ -211,6 +212,11 @@ proc __check_context() { } } + +proc __check_context() { + __init_context(&__context); +} + proc alloc(size: int, alignment: int = DEFAULT_ALIGNMENT) -> rawptr #inline { __check_context(); var a = context.allocator; diff --git a/src/ir.cpp b/src/ir.cpp index e73b0a288..7e4858c44 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -3677,7 +3677,7 @@ irValue *ir_build_builtin_proc(irProcedure *proc, AstNode *expr, TypeAndValue tv Entity *e = entity_of_ident(proc->module->info, ident); GB_ASSERT(e != NULL); - if (e->parent_proc_decl != NULL) { + if (e->parent_proc_decl != NULL && e->parent_proc_decl->entity_count > 0) { procedure = e->parent_proc_decl->entities[0]->token.string; } else { procedure = str_lit(""); @@ -4665,7 +4665,10 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) { TypeTuple *pt = &type->params->Tuple; if (arg_count < type->param_count) { - String procedure = proc->entity->token.string; + String procedure = {}; + if (proc->entity != NULL) { + procedure = proc->entity->token.string; + } TokenPos pos = ast_node_token(ce->proc).pos; isize end = type->param_count;