mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 04:50:29 +00:00
Remove old procedures
This commit is contained in:
104
core/mem.odin
104
core/mem.odin
@@ -204,111 +204,7 @@ end_arena_temp_memory :: proc(using tmp: ArenaTempMemory) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
align_of_type_info :: proc(type_info: ^Type_Info) -> int {
|
||||
prev_pow2 :: proc(n: i64) -> i64 {
|
||||
if n <= 0 do return 0;
|
||||
n |= n >> 1;
|
||||
n |= n >> 2;
|
||||
n |= n >> 4;
|
||||
n |= n >> 8;
|
||||
n |= n >> 16;
|
||||
n |= n >> 32;
|
||||
return n - (n >> 1);
|
||||
}
|
||||
|
||||
WORD_SIZE :: size_of(int);
|
||||
MAX_ALIGN :: 2*align_of(rawptr); // TODO(bill): Should these constants be builtin constants?
|
||||
switch info in type_info.variant {
|
||||
case Type_Info_Named:
|
||||
return align_of_type_info(info.base);
|
||||
case Type_Info_Integer:
|
||||
return type_info.align;
|
||||
case Type_Info_Rune:
|
||||
return type_info.align;
|
||||
case Type_Info_Float:
|
||||
return type_info.align;
|
||||
case Type_Info_String:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Boolean:
|
||||
return 1;
|
||||
case Type_Info_Any:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Pointer:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Procedure:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Array:
|
||||
return align_of_type_info(info.elem);
|
||||
case Type_Info_Dynamic_Array:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Slice:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Tuple:
|
||||
return type_info.align;
|
||||
case Type_Info_Struct:
|
||||
return type_info.align;
|
||||
case Type_Info_Union:
|
||||
return type_info.align;
|
||||
case Type_Info_Enum:
|
||||
return align_of_type_info(info.base);
|
||||
case Type_Info_Map:
|
||||
return align_of_type_info(info.generated_struct);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
align_formula :: proc(size, align: int) -> int {
|
||||
result := size + align-1;
|
||||
return result - result%align;
|
||||
}
|
||||
|
||||
size_of_type_info :: proc(type_info: ^Type_Info) -> int {
|
||||
WORD_SIZE :: size_of(int);
|
||||
switch info in type_info.variant {
|
||||
case Type_Info_Named:
|
||||
return size_of_type_info(info.base);
|
||||
case Type_Info_Integer:
|
||||
return type_info.size;
|
||||
case Type_Info_Rune:
|
||||
return type_info.size;
|
||||
case Type_Info_Float:
|
||||
return type_info.size;
|
||||
case Type_Info_String:
|
||||
return 2*WORD_SIZE;
|
||||
case Type_Info_Boolean:
|
||||
return 1;
|
||||
case Type_Info_Any:
|
||||
return 2*WORD_SIZE;
|
||||
case Type_Info_Pointer:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Procedure:
|
||||
return WORD_SIZE;
|
||||
case Type_Info_Array:
|
||||
count := info.count;
|
||||
if count == 0 do return 0;
|
||||
size := size_of_type_info(info.elem);
|
||||
align := align_of_type_info(info.elem);
|
||||
alignment := align_formula(size, align);
|
||||
return alignment*(count-1) + size;
|
||||
case Type_Info_Dynamic_Array:
|
||||
return size_of(rawptr) + 2*size_of(int) + size_of(Allocator);
|
||||
case Type_Info_Slice:
|
||||
return 2*WORD_SIZE;
|
||||
case Type_Info_Struct:
|
||||
return type_info.size;
|
||||
case Type_Info_Union:
|
||||
return type_info.size;
|
||||
case Type_Info_Enum:
|
||||
return size_of_type_info(info.base);
|
||||
case Type_Info_Map:
|
||||
return size_of_type_info(info.generated_struct);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user