From 94570a24c1f7efcad439fe49421861758e273a9a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 4 May 2021 00:56:29 +0100 Subject: [PATCH] Move anonymous proc generation into `lbGenerator` --- src/llvm_backend.cpp | 14 +++++++------- src/llvm_backend.hpp | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index a84c26c9b..1185bb38b 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -10974,12 +10974,9 @@ lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left, lbValue ri lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &prefix_name, Ast *expr, lbProcedure *parent) { - auto *found = map_get(&m->anonymous_proc_lits, hash_pointer(expr)); - if (found != nullptr) { - lbValue value = {}; - value.value = (*found)->value; - value.type = (*found)->type; - return value; + lbProcedure **found = map_get(&m->gen->anonymous_proc_lits, hash_pointer(expr)); + if (found) { + return lb_find_procedure_value_from_entity(m, (*found)->entity); } ast_node(pl, ProcLit, expr); @@ -10988,7 +10985,7 @@ lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &prefix_name, A // parent$count isize name_len = prefix_name.len + 1 + 8 + 1; char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - i32 name_id = cast(i32)m->anonymous_proc_lits.entries.count; + i32 name_id = cast(i32)m->gen->anonymous_proc_lits.entries.count; name_len = gb_snprintf(name_text, name_len, "%.*s$anon-%d", LIT(prefix_name), name_id); String name = make_string((u8 *)name_text, name_len-1); @@ -11002,6 +10999,7 @@ lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &prefix_name, A Entity *e = alloc_entity_procedure(nullptr, token, type, pl->tags); e->file = expr->file; e->decl_info = pl->decl; + e->code_gen_module = m; lbProcedure *p = lb_create_procedure(m, e); lbValue value = {}; @@ -11016,6 +11014,7 @@ lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &prefix_name, A } map_set(&m->anonymous_proc_lits, hash_pointer(expr), p); + map_set(&m->gen->anonymous_proc_lits, hash_pointer(expr), p); return value; } @@ -13112,6 +13111,7 @@ bool lb_init_generator(lbGenerator *gen, Checker *c) { map_init(&gen->modules, permanent_allocator(), gen->info->packages.entries.count*2); map_init(&gen->modules_through_ctx, permanent_allocator(), gen->info->packages.entries.count*2); + map_init(&gen->anonymous_proc_lits, heap_allocator(), 1024); gb_mutex_init(&gen->mutex); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 8c4e9b256..f212d9fc0 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -135,6 +135,8 @@ struct lbGenerator { Map modules_through_ctx; // Key: LLVMContextRef * lbModule default_module; + Map anonymous_proc_lits; // Key: Ast * + gbAtomic32 global_array_index; gbAtomic32 global_generated_index; };