aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-11-15 18:08:52 +0000
committergingerBill <bill@gingerbill.org>2020-11-15 18:08:52 +0000
commit3c1c10a1785a97831a69fb6d94356d5cc4989bd6 (patch)
tree1986555b3eafc3e849400ce423f6cd6ecc08c45d /src/main.cpp
parent9f930421632f4f6d5352ec01f12a1a7fb1050ba7 (diff)
Begin clarifying allocation patterns by changing from `heap_allocator` to specific arenas
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 3717a4147..d0d2e2bbb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1643,12 +1643,15 @@ int main(int arg_count, char const **arg_ptr) {
timings_init(timings, str_lit("Total Time"), 128);
defer (timings_destroy(timings));
+ arena_init(&permanent_arena, heap_allocator());
+ arena_init(&temporary_arena, heap_allocator());
+ arena_init(&global_ast_arena, heap_allocator());
+
init_string_buffer_memory();
init_string_interner();
init_global_error_collector();
init_keyword_hash_table();
global_big_int_init();
- arena_init(&global_ast_arena, heap_allocator());
array_init(&library_collections, heap_allocator());
// NOTE(bill): 'core' cannot be (re)defined by the user
@@ -1795,6 +1798,8 @@ int main(int arg_count, char const **arg_ptr) {
return 1;
}
+ arena_free_all(&temporary_arena);
+
if (build_context.generate_docs) {
// generate_documentation(&parser);
return 0;
@@ -1812,6 +1817,7 @@ int main(int arg_count, char const **arg_ptr) {
check_parsed_files(&checker);
}
+ arena_free_all(&temporary_arena);
if (build_context.no_output_files) {
if (build_context.query_data_set_settings.ok) {
@@ -1842,6 +1848,8 @@ int main(int arg_count, char const **arg_ptr) {
}
lb_generate_code(&gen);
+ arena_free_all(&temporary_arena);
+
switch (build_context.build_mode) {
case BuildMode_Executable:
case BuildMode_DynamicLibrary:
@@ -1919,12 +1927,18 @@ int main(int arg_count, char const **arg_ptr) {
timings_start_section(timings, str_lit("llvm ir gen"));
ir_gen_tree(&ir_gen);
+ arena_free_all(&temporary_arena);
+
timings_start_section(timings, str_lit("llvm ir opt tree"));
ir_opt_tree(&ir_gen);
+ arena_free_all(&temporary_arena);
+
timings_start_section(timings, str_lit("llvm ir print"));
print_llvm_ir(&ir_gen);
+ arena_free_all(&temporary_arena);
+
String output_name = ir_gen.output_name;
String output_base = ir_gen.output_base;