aboutsummaryrefslogtreecommitdiff
path: root/src/tilde.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-07-25 14:37:19 +0100
committergingerBill <bill@gingerbill.org>2023-07-25 14:37:19 +0100
commitc4033c215e01343709a0d7928c277a6425f53524 (patch)
tree9010d0f0f6df92383102f12a719ab3d84c20054c /src/tilde.cpp
parente914d551e7c4a89dfddeca5dd42f24716968c4e5 (diff)
Support non-constant global slices
Diffstat (limited to 'src/tilde.cpp')
-rw-r--r--src/tilde.cpp25
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);