aboutsummaryrefslogtreecommitdiff
path: root/src/tilde_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-07-14 13:01:17 +0100
committergingerBill <bill@gingerbill.org>2023-07-14 13:01:17 +0100
commit2a10c8fe5c9d27e1a110346ef423c1cadc95daa3 (patch)
treeeac791bd5256f65844fc0a304ef1dfb0c2b53f8d /src/tilde_backend.cpp
parent7cd2d14b6410a17783020cea390f2be9534fa432 (diff)
Begin work on building statements
Diffstat (limited to 'src/tilde_backend.cpp')
-rw-r--r--src/tilde_backend.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/tilde_backend.cpp b/src/tilde_backend.cpp
index abaf0b825..dd3c8e537 100644
--- a/src/tilde_backend.cpp
+++ b/src/tilde_backend.cpp
@@ -187,12 +187,23 @@ cgModule *cg_module_create(Checker *c) {
map_init(&m->values);
array_init(&m->procedures_to_generate, heap_allocator());
+ map_init(&m->file_id_map);
+
+
+ for_array(id, global_files) {
+ if (AstFile *f = global_files[id]) {
+ char const *path = alloc_cstring(permanent_allocator(), f->fullpath);
+ map_set(&m->file_id_map, cast(uintptr)id, tb_file_create(m->mod, path));
+ }
+ }
+
return m;
}
void cg_module_destroy(cgModule *m) {
map_destroy(&m->values);
array_free(&m->procedures_to_generate);
+ map_destroy(&m->file_id_map);
tb_module_destroy(m->mod);
}
@@ -601,15 +612,24 @@ gb_internal void cg_procedure_end(cgProcedure *p) {
tb_module_compile_function(p->module->mod, p->func, TB_ISEL_FAST);
}
-gb_internal void cg_procedure_build_body(cgProcedure *p) {
+gb_internal void cg_procedure_generate(cgProcedure *p) {
if (p->body == nullptr) {
return;
}
+ cg_procedure_begin(p);
+ defer (cg_procedure_end(p));
- // TODO(bill):
+ if (p->name != "bug.main") {
+ return;
+ }
+ if (p->body != nullptr) {
+ cg_build_stmt(p, p->body);
+ }
}
+#include "tilde_stmt.cpp"
+
gb_internal bool cg_generate_code(Checker *c) {
TIME_SECTION("Tilde Module Initializtion");
@@ -699,12 +719,7 @@ gb_internal bool cg_generate_code(Checker *c) {
for (isize i = 0; i < m->procedures_to_generate.count; i++) {
- cgProcedure *p = m->procedures_to_generate[i];
- cg_procedure_begin(p);
- if (p->name == "main") {
- cg_procedure_build_body(p);
- }
- cg_procedure_end(p);
+ cg_procedure_generate(m->procedures_to_generate[i]);
}