Separate ini global var stuff

This commit is contained in:
gingerBill
2025-09-19 13:52:25 +01:00
parent a8b2b1a23b
commit ec91e2c15b
+37 -24
View File
@@ -1924,28 +1924,7 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_verification_worker_proc) {
return 0; return 0;
} }
gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast *init_expr, lbGlobalVariable &var) {
gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedure *p) {
lb_begin_procedure_body(p);
lb_setup_type_info_data(m);
if (p->objc_names) {
LLVMBuildCall2(p->builder, lb_type_internal_for_procedures_raw(m, p->objc_names->type), p->objc_names->value, nullptr, 0, "");
}
for (auto &var : *p->global_variables) {
if (var.is_initialized) {
continue;
}
lbModule *entity_module = m;
Entity *e = var.decl->entity;
GB_ASSERT(e->kind == Entity_Variable);
e->code_gen_module = entity_module;
Ast *init_expr = var.decl->init_expr;
if (init_expr != nullptr) { if (init_expr != nullptr) {
lbValue init = lb_build_expr(p, init_expr); lbValue init = lb_build_expr(p, init_expr);
if (init.value == nullptr) { if (init.value == nullptr) {
@@ -1957,7 +1936,7 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur
if (e->Variable.is_rodata) { if (e->Variable.is_rodata) {
LLVMSetGlobalConstant(var.var.value, true); LLVMSetGlobalConstant(var.var.value, true);
} }
continue; return true;
} }
GB_PANIC("Invalid init value, got %s", expr_to_string(init_expr)); GB_PANIC("Invalid init value, got %s", expr_to_string(init_expr));
} }
@@ -1975,7 +1954,7 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur
if (e->Variable.is_rodata) { if (e->Variable.is_rodata) {
LLVMSetGlobalConstant(var.var.value, true); LLVMSetGlobalConstant(var.var.value, true);
} }
continue; return true;
} }
} else { } else {
var.init = init; var.init = init;
@@ -2010,8 +1989,37 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur
var.is_initialized = true; var.is_initialized = true;
} }
return false;
}
gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedure *p) {
lb_begin_procedure_body(p);
lb_setup_type_info_data(m);
if (p->objc_names) {
LLVMBuildCall2(p->builder, lb_type_internal_for_procedures_raw(m, p->objc_names->type), p->objc_names->value, nullptr, 0, "");
}
for (auto &var : *p->global_variables) {
if (var.is_initialized) {
continue;
}
lbModule *entity_module = m;
Entity *e = var.decl->entity;
GB_ASSERT(e->kind == Entity_Variable);
e->code_gen_module = entity_module;
Ast *init_expr = var.decl->init_expr;
if (init_expr == nullptr && var.init.value == nullptr) {
continue;
}
lb_init_global_var(m, p, e, init_expr, var);
} }
CheckerInfo *info = m->gen->info; CheckerInfo *info = m->gen->info;
@@ -2448,7 +2456,12 @@ gb_internal WORKER_TASK_PROC(lb_generate_missing_procedures_to_check_worker_proc
for (isize i = 0; i < m->missing_procedures_to_check.count; i++) { for (isize i = 0; i < m->missing_procedures_to_check.count; i++) {
lbProcedure *p = m->missing_procedures_to_check[i]; lbProcedure *p = m->missing_procedures_to_check[i];
debugf("Generate missing procedure: %.*s module %p\n", LIT(p->name), m); debugf("Generate missing procedure: %.*s module %p\n", LIT(p->name), m);
isize count = m->procedures_to_generate.count;
lb_generate_procedure(m, p); lb_generate_procedure(m, p);
isize new_count = m->procedures_to_generate.count;
if (count != new_count) {
gb_printf_err("NEW STUFF!\n");
}
} }
return 0; return 0;
} }