Move anonymous proc generation into lbGenerator

This commit is contained in:
gingerBill
2021-05-04 00:56:29 +01:00
parent 17001bf38c
commit 94570a24c1
2 changed files with 9 additions and 7 deletions
+7 -7
View File
@@ -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) { 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)); lbProcedure **found = map_get(&m->gen->anonymous_proc_lits, hash_pointer(expr));
if (found != nullptr) { if (found) {
lbValue value = {}; return lb_find_procedure_value_from_entity(m, (*found)->entity);
value.value = (*found)->value;
value.type = (*found)->type;
return value;
} }
ast_node(pl, ProcLit, expr); ast_node(pl, ProcLit, expr);
@@ -10988,7 +10985,7 @@ lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &prefix_name, A
// parent$count // parent$count
isize name_len = prefix_name.len + 1 + 8 + 1; isize name_len = prefix_name.len + 1 + 8 + 1;
char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); 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); 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); 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); Entity *e = alloc_entity_procedure(nullptr, token, type, pl->tags);
e->file = expr->file; e->file = expr->file;
e->decl_info = pl->decl; e->decl_info = pl->decl;
e->code_gen_module = m;
lbProcedure *p = lb_create_procedure(m, e); lbProcedure *p = lb_create_procedure(m, e);
lbValue value = {}; 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->anonymous_proc_lits, hash_pointer(expr), p);
map_set(&m->gen->anonymous_proc_lits, hash_pointer(expr), p);
return value; 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, 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->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); gb_mutex_init(&gen->mutex);
+2
View File
@@ -135,6 +135,8 @@ struct lbGenerator {
Map<lbModule *> modules_through_ctx; // Key: LLVMContextRef * Map<lbModule *> modules_through_ctx; // Key: LLVMContextRef *
lbModule default_module; lbModule default_module;
Map<lbProcedure *> anonymous_proc_lits; // Key: Ast *
gbAtomic32 global_array_index; gbAtomic32 global_array_index;
gbAtomic32 global_generated_index; gbAtomic32 global_generated_index;
}; };