diff options
| author | gingerBill <bill@gingerbill.org> | 2023-07-25 14:37:19 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-07-25 14:37:19 +0100 |
| commit | c4033c215e01343709a0d7928c277a6425f53524 (patch) | |
| tree | 9010d0f0f6df92383102f12a719ab3d84c20054c /src/tilde.cpp | |
| parent | e914d551e7c4a89dfddeca5dd42f24716968c4e5 (diff) | |
Support non-constant global slices
Diffstat (limited to 'src/tilde.cpp')
| -rw-r--r-- | src/tilde.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/tilde.cpp b/src/tilde.cpp index 6cd8a42af..64fe70ec4 100644 --- a/src/tilde.cpp +++ b/src/tilde.cpp @@ -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); |