From 830d2007a6bb11f45b3d90f75dc5d0bef63bef44 Mon Sep 17 00:00:00 2001 From: Fabian Sperber Date: Mon, 13 Mar 2023 20:05:46 +0100 Subject: [PATCH] Remove usage of global_default_temp_allocator_data when there is no default allocator (freestanding, JS or --default-to-nil-allocator) --- core/runtime/core.odin | 4 +++- core/runtime/core_builtin.odin | 10 +++++++--- core/runtime/default_temporary_allocator.odin | 14 +++++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/core/runtime/core.odin b/core/runtime/core.odin index 2d20310ae..040590b4a 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -621,7 +621,9 @@ __init_context :: proc "contextless" (c: ^Context) { c.allocator.data = nil c.temp_allocator.procedure = default_temp_allocator_proc - c.temp_allocator.data = &global_default_temp_allocator_data + when !NO_DEFAULT_TEMP_ALLOCATOR { + c.temp_allocator.data = &global_default_temp_allocator_data + } when !ODIN_DISABLE_ASSERT { c.assertion_failure_proc = default_assertion_failure_proc diff --git a/core/runtime/core_builtin.odin b/core/runtime/core_builtin.odin index ae6a4aaf4..84fe5e522 100644 --- a/core/runtime/core_builtin.odin +++ b/core/runtime/core_builtin.odin @@ -15,11 +15,15 @@ container_of :: #force_inline proc "contextless" (ptr: $P/^$Field_Type, $T: type } -@thread_local global_default_temp_allocator_data: Default_Temp_Allocator +when !NO_DEFAULT_TEMP_ALLOCATOR { + @thread_local global_default_temp_allocator_data: Default_Temp_Allocator +} -@builtin +@(builtin, disabled=NO_DEFAULT_TEMP_ALLOCATOR) init_global_temporary_allocator :: proc(size: int, backup_allocator := context.allocator) { - default_temp_allocator_init(&global_default_temp_allocator_data, size, backup_allocator) + when !NO_DEFAULT_TEMP_ALLOCATOR { + default_temp_allocator_init(&global_default_temp_allocator_data, size, backup_allocator) + } } diff --git a/core/runtime/default_temporary_allocator.odin b/core/runtime/default_temporary_allocator.odin index 296ead722..c90f0388d 100644 --- a/core/runtime/default_temporary_allocator.odin +++ b/core/runtime/default_temporary_allocator.odin @@ -1,9 +1,9 @@ package runtime DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE: int : #config(DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE, 4 * Megabyte) +NO_DEFAULT_TEMP_ALLOCATOR: bool : ODIN_OS == .Freestanding || ODIN_OS == .JS || ODIN_DEFAULT_TO_NIL_ALLOCATOR - -when ODIN_OS == .Freestanding || ODIN_OS == .JS || ODIN_DEFAULT_TO_NIL_ALLOCATOR { +when NO_DEFAULT_TEMP_ALLOCATOR { Default_Temp_Allocator :: struct {} default_temp_allocator_init :: proc(s: ^Default_Temp_Allocator, size: int, backing_allocator := context.allocator) {} @@ -54,6 +54,11 @@ when ODIN_OS == .Freestanding || ODIN_OS == .JS || ODIN_DEFAULT_TO_NIL_ALLOCATOR default_temp_allocator_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) { arena_temp_end(temp, loc) } + + @(fini, private) + _destroy_temp_allocator_fini :: proc() { + default_temp_allocator_destroy(&global_default_temp_allocator_data) + } } @(deferred_out=default_temp_allocator_temp_end) @@ -72,8 +77,3 @@ default_temp_allocator :: proc(allocator: ^Default_Temp_Allocator) -> Allocator data = allocator, } } - -@(fini, private) -_destroy_temp_allocator_fini :: proc() { - default_temp_allocator_destroy(&global_default_temp_allocator_data) -}