Support non-constant global slices

This commit is contained in:
gingerBill
2023-07-25 14:37:19 +01:00
parent e914d551e7
commit c4033c215e
5 changed files with 77 additions and 21 deletions
+15 -10
View File
@@ -694,22 +694,14 @@ gb_internal bool cg_generate_code(Checker *c, LinkerData *linker_data) {
Type *proc_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin);
cgProcedure *p = cg_procedure_create_dummy(m, str_lit(CG_STARTUP_RUNTIME_PROC_NAME), proc_type);
p->is_startup = true;
cg_procedure_begin(p);
cg_global_variables_initialize(p, &global_variables);
tb_inst_ret(p->func, 0, nullptr);
cg_procedure_end(p);
cg_startup_runtime_proc = p;
}
if (true) {
Type *proc_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin);
cgProcedure *p = cg_procedure_create_dummy(m, str_lit(CG_CLEANUP_RUNTIME_PROC_NAME), proc_type);
p->is_startup = true;
cg_procedure_begin(p);
tb_inst_ret(p->func, 0, nullptr);
cg_procedure_end(p);
cg_cleanup_runtime_proc = p;
}
auto *min_dep_set = &info->minimum_dependency_set;
@@ -741,6 +733,19 @@ gb_internal bool cg_generate_code(Checker *c, LinkerData *linker_data) {
array_add(&procedures_to_generate, p);
}
}
{
cgProcedure *p = cg_startup_runtime_proc;
cg_procedure_begin(p);
cg_global_variables_initialize(p, &global_variables);
tb_inst_ret(p->func, 0, nullptr);
cg_procedure_end(p);
}
{
cgProcedure *p = cg_cleanup_runtime_proc;
cg_procedure_begin(p);
tb_inst_ret(p->func, 0, nullptr);
cg_procedure_end(p);
}
for (cgProcedure *p : procedures_to_generate) {
cg_add_procedure_to_queue(p);