diff options
| author | gingerBill <bill@gingerbill.org> | 2025-02-24 14:24:06 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-02-24 14:24:06 +0000 |
| commit | f0f395c510a7b0c625b0a222d00ddbe4c63a496b (patch) | |
| tree | dba7354e51da745a655a8c32f590560a55b8e7b0 /src/llvm_backend.cpp | |
| parent | 46a8991d0fae4fb119e9934d62959e5a1729a636 (diff) | |
Fix canonicalization
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 9bbcc2184..fc56044d3 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -233,7 +233,7 @@ gb_internal lbContextData *lb_push_context_onto_stack(lbProcedure *p, lbAddr ctx } -gb_internal String lb_internal_gen_proc_name_from_type(char const *prefix, Type *type) { +gb_internal String lb_internal_gen_name_from_type(char const *prefix, Type *type) { gbString str = gb_string_make(permanent_allocator(), prefix); gbString tcs = temp_canonical_string(type); str = gb_string_appendc(str, CANONICAL_TYPE_SEPARATOR); @@ -259,7 +259,10 @@ gb_internal lbValue lb_equal_proc_for_type(lbModule *m, Type *type) { } - String proc_name = lb_internal_gen_proc_name_from_type("__$equal", type); + String proc_name = lb_internal_gen_name_from_type("__$equal", type); + lbProcedure *p = lb_create_dummy_procedure(m, proc_name, t_equal_proc); + map_set(&m->equal_procs, type, p); + lb_begin_procedure_body(p); // lb_add_attribute_to_proc(m, p->value, "readonly"); lb_add_attribute_to_proc(m, p->value, "nounwind"); @@ -418,7 +421,7 @@ gb_internal lbValue lb_hasher_proc_for_type(lbModule *m, Type *type) { return {(*found)->value, (*found)->type}; } - String proc_name = lb_internal_gen_proc_name_from_type("__$hasher", type); + String proc_name = lb_internal_gen_name_from_type("__$hasher", type); lbProcedure *p = lb_create_dummy_procedure(m, proc_name, t_hasher_proc); map_set(&m->hasher_procs, type, p); @@ -581,7 +584,7 @@ gb_internal lbValue lb_map_get_proc_for_type(lbModule *m, Type *type) { return {(*found)->value, (*found)->type}; } - String proc_name = lb_internal_gen_proc_name_from_type("__$map_get", type); + String proc_name = lb_internal_gen_name_from_type("__$map_get", type); lbProcedure *p = lb_create_dummy_procedure(m, proc_name, t_map_get_proc); map_set(&m->map_get_procs, type, p); @@ -758,7 +761,7 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { return {(*found)->value, (*found)->type}; } - String proc_name = lb_internal_gen_proc_name_from_type("__$map_set", type); + String proc_name = lb_internal_gen_name_from_type("__$map_set", type); lbProcedure *p = lb_create_dummy_procedure(m, proc_name, t_map_set_proc); map_set(&m->map_set_procs, type, p); @@ -906,7 +909,9 @@ gb_internal lbValue lb_gen_map_cell_info_ptr(lbModule *m, Type *type) { LLVMValueRef llvm_res = llvm_const_named_struct(m, t_map_cell_info, const_values, gb_count_of(const_values)); lbValue res = {llvm_res, t_map_cell_info}; - lbAddr addr = lb_add_global_generated(m, t_map_cell_info, res, nullptr); + lbAddr addr = lb_add_global_generated_with_name(m, t_map_cell_info, res, lb_internal_gen_name_from_type("ggv$map_cell_info", type)); + + lb_add_global_generated(m, t_map_cell_info, res, nullptr); lb_make_global_private_const(addr); map_set(&m->map_cell_info_map, type, addr); @@ -937,7 +942,7 @@ gb_internal lbValue lb_gen_map_info_ptr(lbModule *m, Type *map_type) { LLVMValueRef llvm_res = llvm_const_named_struct(m, t_map_info, const_values, gb_count_of(const_values)); lbValue res = {llvm_res, t_map_info}; - lbAddr addr = lb_add_global_generated(m, t_map_info, res, nullptr); + lbAddr addr = lb_add_global_generated_with_name(m, t_map_info, res, lb_internal_gen_name_from_type("ggv$map_info", map_type)); lb_make_global_private_const(addr); map_set(&m->map_info_map, map_type, addr); |