Browse Source

[mem]: Put panic allocator after nil allocator, adjust @require_results

flysand7 1 year ago
parent
commit
299accb717
1 changed files with 57 additions and 58 deletions
  1. 57 58
      core/mem/allocators.odin

+ 57 - 58
core/mem/allocators.odin

@@ -3,6 +3,7 @@ package mem
 import "base:intrinsics"
 import "base:runtime"
 
+@(require_results)
 nil_allocator :: proc() -> Allocator {
 	return Allocator{
 		procedure = nil_allocator_proc,
@@ -21,6 +22,62 @@ nil_allocator_proc :: proc(
 	return nil, nil
 }
 
+
+
+@(require_results)
+panic_allocator :: proc() -> Allocator {
+	return Allocator{
+		procedure = panic_allocator_proc,
+		data = nil,
+	}
+}
+
+panic_allocator_proc :: proc(
+	allocator_data: rawptr,
+	mode: Allocator_Mode,
+    size, alignment: int,
+    old_memory: rawptr,
+	old_size: int,
+	loc := #caller_location,
+) -> ([]byte, Allocator_Error) {
+	switch mode {
+	case .Alloc:
+		if size > 0 {
+			panic("mem: panic allocator, .Alloc called", loc=loc)
+		}
+	case .Alloc_Non_Zeroed:
+		if size > 0 {
+			panic("mem: panic allocator, .Alloc_Non_Zeroed called", loc=loc)
+		}
+	case .Resize:
+		if size > 0 {
+			panic("mem: panic allocator, .Resize called", loc=loc)
+		}
+	case .Resize_Non_Zeroed:
+		if size > 0 {
+			panic("mem: panic allocator, .Resize_Non_Zeroed called", loc=loc)
+		}
+	case .Free:
+		if old_memory != nil {
+			panic("mem: panic allocator, .Free called", loc=loc)
+		}
+	case .Free_All:
+		panic("mem: panic allocator, .Free_All called", loc=loc)
+	case .Query_Features:
+		set := (^Allocator_Mode_Set)(old_memory)
+		if set != nil {
+			set^ = {.Query_Features}
+		}
+		return nil, nil
+
+	case .Query_Info:
+		panic("mem: panic allocator, .Query_Info called", loc=loc)
+	}
+	return nil, nil
+}
+
+
+
 Arena :: struct {
 	data:       []byte,
 	offset:     int,
@@ -300,7 +357,6 @@ scratch_alloc_bytes_non_zeroed :: proc(
 	return ptr, err
 }
 
-@(require_results)
 scratch_free :: proc(s: ^Scratch, ptr: rawptr, loc := #caller_location) -> Allocator_Error {
 	if s.data == nil {
 		panic("Free on an uninitialized scratch allocator", loc)
@@ -555,7 +611,6 @@ stack_alloc_bytes_non_zeroed :: proc(
 	return byte_slice(rawptr(next_addr), size), nil
 }
 
-@(require_results)
 stack_free :: proc(
 	s: ^Stack,
 	old_memory: rawptr,
@@ -824,7 +879,6 @@ small_stack_alloc_bytes_non_zeroed :: proc(
 	return byte_slice(rawptr(next_addr), size), nil
 }
 
-@(require_results)
 small_stack_free :: proc(
 	s: ^Small_Stack,
 	old_memory: rawptr,
@@ -1254,60 +1308,6 @@ dynamic_arena_allocator_proc :: proc(
 
 
 
-panic_allocator_proc :: proc(
-	allocator_data: rawptr,
-	mode: Allocator_Mode,
-    size, alignment: int,
-    old_memory: rawptr,
-	old_size: int,
-	loc := #caller_location,
-) -> ([]byte, Allocator_Error) {
-	switch mode {
-	case .Alloc:
-		if size > 0 {
-			panic("mem: panic allocator, .Alloc called", loc=loc)
-		}
-	case .Alloc_Non_Zeroed:
-		if size > 0 {
-			panic("mem: panic allocator, .Alloc_Non_Zeroed called", loc=loc)
-		}
-	case .Resize:
-		if size > 0 {
-			panic("mem: panic allocator, .Resize called", loc=loc)
-		}
-	case .Resize_Non_Zeroed:
-		if size > 0 {
-			panic("mem: panic allocator, .Resize_Non_Zeroed called", loc=loc)
-		}
-	case .Free:
-		if old_memory != nil {
-			panic("mem: panic allocator, .Free called", loc=loc)
-		}
-	case .Free_All:
-		panic("mem: panic allocator, .Free_All called", loc=loc)
-	case .Query_Features:
-		set := (^Allocator_Mode_Set)(old_memory)
-		if set != nil {
-			set^ = {.Query_Features}
-		}
-		return nil, nil
-
-	case .Query_Info:
-		panic("mem: panic allocator, .Query_Info called", loc=loc)
-	}
-	return nil, nil
-}
-
-@(require_results)
-panic_allocator :: proc() -> Allocator {
-	return Allocator{
-		procedure = panic_allocator_proc,
-		data = nil,
-	}
-}
-
-
-
 Buddy_Block :: struct #align(align_of(uint)) {
 	size:    uint,
 	is_free: bool,
@@ -1513,7 +1513,6 @@ buddy_allocator_alloc_bytes_non_zeroed :: proc(b: ^Buddy_Allocator, size: uint)
 	return nil, nil
 }
 
-@(require_results)
 buddy_allocator_free :: proc(b: ^Buddy_Allocator, ptr: rawptr) -> Allocator_Error {
 	if ptr != nil {
 		if !(b.head <= ptr && ptr <= b.tail) {