mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
[mem]: Put panic allocator after nil allocator, adjust @require_results
This commit is contained in:
+57
-58
@@ -3,6 +3,7 @@ package mem
|
|||||||
import "base:intrinsics"
|
import "base:intrinsics"
|
||||||
import "base:runtime"
|
import "base:runtime"
|
||||||
|
|
||||||
|
@(require_results)
|
||||||
nil_allocator :: proc() -> Allocator {
|
nil_allocator :: proc() -> Allocator {
|
||||||
return Allocator{
|
return Allocator{
|
||||||
procedure = nil_allocator_proc,
|
procedure = nil_allocator_proc,
|
||||||
@@ -21,6 +22,62 @@ nil_allocator_proc :: proc(
|
|||||||
return nil, nil
|
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 {
|
Arena :: struct {
|
||||||
data: []byte,
|
data: []byte,
|
||||||
offset: int,
|
offset: int,
|
||||||
@@ -300,7 +357,6 @@ scratch_alloc_bytes_non_zeroed :: proc(
|
|||||||
return ptr, err
|
return ptr, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
|
||||||
scratch_free :: proc(s: ^Scratch, ptr: rawptr, loc := #caller_location) -> Allocator_Error {
|
scratch_free :: proc(s: ^Scratch, ptr: rawptr, loc := #caller_location) -> Allocator_Error {
|
||||||
if s.data == nil {
|
if s.data == nil {
|
||||||
panic("Free on an uninitialized scratch allocator", loc)
|
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
|
return byte_slice(rawptr(next_addr), size), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
|
||||||
stack_free :: proc(
|
stack_free :: proc(
|
||||||
s: ^Stack,
|
s: ^Stack,
|
||||||
old_memory: rawptr,
|
old_memory: rawptr,
|
||||||
@@ -824,7 +879,6 @@ small_stack_alloc_bytes_non_zeroed :: proc(
|
|||||||
return byte_slice(rawptr(next_addr), size), nil
|
return byte_slice(rawptr(next_addr), size), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
|
||||||
small_stack_free :: proc(
|
small_stack_free :: proc(
|
||||||
s: ^Small_Stack,
|
s: ^Small_Stack,
|
||||||
old_memory: rawptr,
|
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)) {
|
Buddy_Block :: struct #align(align_of(uint)) {
|
||||||
size: uint,
|
size: uint,
|
||||||
is_free: bool,
|
is_free: bool,
|
||||||
@@ -1513,7 +1513,6 @@ buddy_allocator_alloc_bytes_non_zeroed :: proc(b: ^Buddy_Allocator, size: uint)
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@(require_results)
|
|
||||||
buddy_allocator_free :: proc(b: ^Buddy_Allocator, ptr: rawptr) -> Allocator_Error {
|
buddy_allocator_free :: proc(b: ^Buddy_Allocator, ptr: rawptr) -> Allocator_Error {
|
||||||
if ptr != nil {
|
if ptr != nil {
|
||||||
if !(b.head <= ptr && ptr <= b.tail) {
|
if !(b.head <= ptr && ptr <= b.tail) {
|
||||||
|
|||||||
Reference in New Issue
Block a user