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) {
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);
+2
View File
@@ -135,6 +135,8 @@ struct lbGenerator {
Map<lbModule *> modules_through_ctx; // Key: LLVMContextRef *
lbModule default_module;
Map<lbProcedure *> anonymous_proc_lits; // Key: Ast *
gbAtomic32 global_array_index;
gbAtomic32 global_generated_index;
};