mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 23:58:50 +00:00
Separate ini global var stuff
This commit is contained in:
+37
-24
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user