mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-02 20:58:15 +00:00
Remove enum for favour of Go-style enumerations
This commit is contained in:
+19
-37
@@ -70,11 +70,6 @@ type Type_Info union {
|
||||
Struct Type_Info_Record;
|
||||
Union Type_Info_Record;
|
||||
Raw_Union Type_Info_Record;
|
||||
Enum struct #ordered {
|
||||
base ^Type_Info;
|
||||
values []i64;
|
||||
names []string;
|
||||
};
|
||||
};
|
||||
|
||||
proc type_info_base(info ^Type_Info) -> ^Type_Info {
|
||||
@@ -113,12 +108,13 @@ proc fmuladd64(a, b, c f64) -> f64 #foreign "llvm.fmuladd.f64"
|
||||
|
||||
|
||||
|
||||
type Allocator_Mode enum {
|
||||
ALLOC,
|
||||
FREE,
|
||||
FREE_ALL,
|
||||
RESIZE,
|
||||
}
|
||||
type Allocator_Mode int;
|
||||
const (
|
||||
ALLOCATOR_ALLOC Allocator_Mode = iota;
|
||||
ALLOCATOR_FREE;
|
||||
ALLOCATOR_FREE_ALL;
|
||||
ALLOCATOR_RESIZE;
|
||||
);
|
||||
type Allocator_Proc proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
size, alignment int,
|
||||
old_memory rawptr, old_size int, flags u64) -> rawptr;
|
||||
@@ -162,20 +158,20 @@ proc alloc(size int) -> rawptr #inline { return alloc_align(size, DEFAULT_ALIGNM
|
||||
proc alloc_align(size, alignment int) -> rawptr #inline {
|
||||
__check_context();
|
||||
var a = context.allocator;
|
||||
return a.procedure(a.data, Allocator_Mode.ALLOC, size, alignment, nil, 0, 0);
|
||||
return a.procedure(a.data, ALLOCATOR_ALLOC, size, alignment, nil, 0, 0);
|
||||
}
|
||||
|
||||
proc free(ptr rawptr) #inline {
|
||||
__check_context();
|
||||
var a = context.allocator;
|
||||
if ptr != nil {
|
||||
a.procedure(a.data, Allocator_Mode.FREE, 0, 0, ptr, 0, 0);
|
||||
a.procedure(a.data, ALLOCATOR_FREE, 0, 0, ptr, 0, 0);
|
||||
}
|
||||
}
|
||||
proc free_all() #inline {
|
||||
__check_context();
|
||||
var a = context.allocator;
|
||||
a.procedure(a.data, Allocator_Mode.FREE_ALL, 0, 0, nil, 0, 0);
|
||||
a.procedure(a.data, ALLOCATOR_FREE_ALL, 0, 0, nil, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -183,7 +179,7 @@ proc resize (ptr rawptr, old_size, new_size int) -> rawptr #inline { return
|
||||
proc resize_align(ptr rawptr, old_size, new_size, alignment int) -> rawptr #inline {
|
||||
__check_context();
|
||||
var a = context.allocator;
|
||||
return a.procedure(a.data, Allocator_Mode.RESIZE, new_size, alignment, ptr, old_size, 0);
|
||||
return a.procedure(a.data, ALLOCATOR_RESIZE, new_size, alignment, ptr, old_size, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -216,10 +212,9 @@ proc default_resize_align(old_memory rawptr, old_size, new_size, alignment int)
|
||||
proc default_allocator_proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
size, alignment int,
|
||||
old_memory rawptr, old_size int, flags u64) -> rawptr {
|
||||
using Allocator_Mode;
|
||||
when false {
|
||||
match mode {
|
||||
case ALLOC:
|
||||
case ALLOCATOR_ALLOC:
|
||||
var total_size = size + alignment + size_of(mem.AllocationHeader);
|
||||
var ptr = os.heap_alloc(total_size);
|
||||
var header = ptr as ^mem.AllocationHeader;
|
||||
@@ -227,14 +222,14 @@ proc default_allocator_proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
mem.allocation_header_fill(header, ptr, size);
|
||||
return mem.zero(ptr, size);
|
||||
|
||||
case FREE:
|
||||
case ALLOCATOR_FREE:
|
||||
os.heap_free(mem.allocation_header(old_memory));
|
||||
return nil;
|
||||
|
||||
case FREE_ALL:
|
||||
case ALLOCATOR_FREE_ALL:
|
||||
// NOTE(bill): Does nothing
|
||||
|
||||
case RESIZE:
|
||||
case ALLOCATOR_RESIZE:
|
||||
var total_size = size + alignment + size_of(mem.AllocationHeader);
|
||||
var ptr = os.heap_resize(mem.allocation_header(old_memory), total_size);
|
||||
var header = ptr as ^mem.AllocationHeader;
|
||||
@@ -244,17 +239,17 @@ proc default_allocator_proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
}
|
||||
} else {
|
||||
match mode {
|
||||
case ALLOC:
|
||||
case ALLOCATOR_ALLOC:
|
||||
return os.heap_alloc(size);
|
||||
|
||||
case FREE:
|
||||
case ALLOCATOR_FREE:
|
||||
os.heap_free(old_memory);
|
||||
return nil;
|
||||
|
||||
case FREE_ALL:
|
||||
case ALLOCATOR_FREE_ALL:
|
||||
// NOTE(bill): Does nothing
|
||||
|
||||
case RESIZE:
|
||||
case ALLOCATOR_RESIZE:
|
||||
return os.heap_resize(old_memory, size);
|
||||
}
|
||||
}
|
||||
@@ -332,17 +327,4 @@ proc __substring_expr_error(file string, line, column int, low, high int) {
|
||||
__debug_trap();
|
||||
}
|
||||
|
||||
proc __enum_to_string(info ^Type_Info, value i64) -> string {
|
||||
match type ti : type_info_base(info) {
|
||||
case Type_Info.Enum:
|
||||
// TODO(bill): Search faster than linearly
|
||||
for var i = 0; i < ti.values.count; i++ {
|
||||
if ti.values[i] == value {
|
||||
return ti.names[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -290,11 +290,6 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) {
|
||||
bprint_type(buf, info.fields[i].type_info);
|
||||
}
|
||||
bprint_string(buf, "}");
|
||||
|
||||
case Enum:
|
||||
bprint_string(buf, "enum ");
|
||||
bprint_type(buf, info.base);
|
||||
bprint_string(buf, "{}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,21 +387,6 @@ proc bprint_any(buf ^[]byte, arg any) {
|
||||
bprint_string(buf, "nil");
|
||||
}
|
||||
|
||||
case Enum:
|
||||
var value i64 = 0;
|
||||
|
||||
match type i : make_any(info.base, arg.data) {
|
||||
case i8: value = i as i64;
|
||||
case i16: value = i as i64;
|
||||
case i32: value = i as i64;
|
||||
case i64: value = i as i64;
|
||||
case u8: value = i as i64;
|
||||
case u16: value = i as i64;
|
||||
case u32: value = i as i64;
|
||||
case u64: value = i as i64;
|
||||
}
|
||||
bprint_string(buf, __enum_to_string(arg.type_info, value));
|
||||
|
||||
case Array:
|
||||
bprintf(buf, "[%]%{", info.count, info.elem);
|
||||
defer bprint_string(buf, "}");
|
||||
|
||||
+4
-9
@@ -162,9 +162,8 @@ proc arena_allocator_proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
old_memory rawptr, old_size int, flags u64) -> rawptr {
|
||||
var arena = allocator_data as ^Arena;
|
||||
|
||||
using Allocator_Mode;
|
||||
match mode {
|
||||
case ALLOC:
|
||||
case ALLOCATOR_ALLOC:
|
||||
var total_size = size + alignment;
|
||||
|
||||
if arena.memory.count + total_size > arena.memory.capacity {
|
||||
@@ -178,14 +177,14 @@ proc arena_allocator_proc(allocator_data rawptr, mode Allocator_Mode,
|
||||
arena.memory.count += total_size;
|
||||
return zero(ptr, size);
|
||||
|
||||
case FREE:
|
||||
case ALLOCATOR_FREE:
|
||||
// NOTE(bill): Free all at once
|
||||
// Use Arena_Temp_Memory if you want to free a block
|
||||
|
||||
case FREE_ALL:
|
||||
case ALLOCATOR_FREE_ALL:
|
||||
arena.memory.count = 0;
|
||||
|
||||
case RESIZE:
|
||||
case ALLOCATOR_RESIZE:
|
||||
return default_resize_align(old_memory, old_size, size, alignment);
|
||||
}
|
||||
|
||||
@@ -263,8 +262,6 @@ proc align_of_type_info(type_info ^Type_Info) -> int {
|
||||
return info.align;
|
||||
case Raw_Union:
|
||||
return info.align;
|
||||
case Enum:
|
||||
return align_of_type_info(info.base);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -339,8 +336,6 @@ proc size_of_type_info(type_info ^Type_Info) -> int {
|
||||
return info.size;
|
||||
case Raw_Union:
|
||||
return info.size;
|
||||
case Enum:
|
||||
return size_of_type_info(info.base);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
+10
-9
@@ -83,23 +83,24 @@ proc last_write_time_by_name(name string) -> File_Time {
|
||||
|
||||
|
||||
|
||||
const (
|
||||
FILE_STANDARD_INPUT = iota;
|
||||
FILE_STANDARD_OUTPUT;
|
||||
FILE_STANDARD_ERROR;
|
||||
|
||||
type File_Standard enum {
|
||||
INPUT,
|
||||
OUTPUT,
|
||||
ERROR,
|
||||
}
|
||||
FILE_STANDARD_COUNT;
|
||||
);
|
||||
|
||||
// NOTE(bill): Uses startup to initialize it
|
||||
var __std_files = [File_Standard.count]File{
|
||||
var __std_files = [FILE_STANDARD_COUNT]File{
|
||||
{handle = win32.GetStdHandle(win32.STD_INPUT_HANDLE) transmute File_Handle },
|
||||
{handle = win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) transmute File_Handle },
|
||||
{handle = win32.GetStdHandle(win32.STD_ERROR_HANDLE) transmute File_Handle },
|
||||
};
|
||||
|
||||
var stdin = ^__std_files[File_Standard.INPUT];
|
||||
var stdout = ^__std_files[File_Standard.OUTPUT];
|
||||
var stderr = ^__std_files[File_Standard.ERROR];
|
||||
var stdin = ^__std_files[FILE_STANDARD_INPUT];
|
||||
var stdout = ^__std_files[FILE_STANDARD_OUTPUT];
|
||||
var stderr = ^__std_files[FILE_STANDARD_ERROR];
|
||||
|
||||
|
||||
|
||||
|
||||
+141
-140
@@ -369,157 +369,158 @@ proc is_key_down(key Key_Code) -> bool {
|
||||
return GetAsyncKeyState(key as i32) < 0;
|
||||
}
|
||||
|
||||
type Key_Code enum i32 {
|
||||
LBUTTON = 0x01,
|
||||
RBUTTON = 0x02,
|
||||
CANCEL = 0x03,
|
||||
MBUTTON = 0x04,
|
||||
type Key_Code i32;
|
||||
const (
|
||||
KEY_LBUTTON Key_Code = 0x01;
|
||||
KEY_RBUTTON = 0x02;
|
||||
KEY_CANCEL = 0x03;
|
||||
KEY_MBUTTON = 0x04;
|
||||
|
||||
BACK = 0x08,
|
||||
TAB = 0x09,
|
||||
KEY_BACK = 0x08;
|
||||
KEY_TAB = 0x09;
|
||||
|
||||
CLEAR = 0x0C,
|
||||
RETURN = 0x0D,
|
||||
KEY_CLEAR = 0x0C;
|
||||
KEY_RETURN = 0x0D;
|
||||
|
||||
SHIFT = 0x10,
|
||||
CONTROL = 0x11,
|
||||
MENU = 0x12,
|
||||
PAUSE = 0x13,
|
||||
CAPITAL = 0x14,
|
||||
KEY_SHIFT = 0x10;
|
||||
KEY_CONTROL = 0x11;
|
||||
KEY_MENU = 0x12;
|
||||
KEY_PAUSE = 0x13;
|
||||
KEY_CAPITAL = 0x14;
|
||||
|
||||
KANA = 0x15,
|
||||
HANGEUL = 0x15,
|
||||
HANGUL = 0x15,
|
||||
JUNJA = 0x17,
|
||||
FINAL = 0x18,
|
||||
HANJA = 0x19,
|
||||
KANJI = 0x19,
|
||||
KEY_KANA = 0x15;
|
||||
KEY_HANGEUL = 0x15;
|
||||
KEY_HANGUL = 0x15;
|
||||
KEY_JUNJA = 0x17;
|
||||
KEY_FINAL = 0x18;
|
||||
KEY_HANJA = 0x19;
|
||||
KEY_KANJI = 0x19;
|
||||
|
||||
ESCAPE = 0x1B,
|
||||
KEY_ESCAPE = 0x1B;
|
||||
|
||||
CONVERT = 0x1C,
|
||||
NONCONVERT = 0x1D,
|
||||
ACCEPT = 0x1E,
|
||||
MODECHANGE = 0x1F,
|
||||
KEY_CONVERT = 0x1C;
|
||||
KEY_NONCONVERT = 0x1D;
|
||||
KEY_ACCEPT = 0x1E;
|
||||
KEY_MODECHANGE = 0x1F;
|
||||
|
||||
SPACE = 0x20,
|
||||
PRIOR = 0x21,
|
||||
NEXT = 0x22,
|
||||
END = 0x23,
|
||||
HOME = 0x24,
|
||||
LEFT = 0x25,
|
||||
UP = 0x26,
|
||||
RIGHT = 0x27,
|
||||
DOWN = 0x28,
|
||||
SELECT = 0x29,
|
||||
PRINT = 0x2A,
|
||||
EXECUTE = 0x2B,
|
||||
SNAPSHOT = 0x2C,
|
||||
INSERT = 0x2D,
|
||||
DELETE = 0x2E,
|
||||
HELP = 0x2F,
|
||||
KEY_SPACE = 0x20;
|
||||
KEY_PRIOR = 0x21;
|
||||
KEY_NEXT = 0x22;
|
||||
KEY_END = 0x23;
|
||||
KEY_HOME = 0x24;
|
||||
KEY_LEFT = 0x25;
|
||||
KEY_UP = 0x26;
|
||||
KEY_RIGHT = 0x27;
|
||||
KEY_DOWN = 0x28;
|
||||
KEY_SELECT = 0x29;
|
||||
KEY_PRINT = 0x2A;
|
||||
KEY_EXECUTE = 0x2B;
|
||||
KEY_SNAPSHOT = 0x2C;
|
||||
KEY_INSERT = 0x2D;
|
||||
KEY_DELETE = 0x2E;
|
||||
KEY_HELP = 0x2F;
|
||||
|
||||
NUM0 = '0',
|
||||
NUM1 = '1',
|
||||
NUM2 = '2',
|
||||
NUM3 = '3',
|
||||
NUM4 = '4',
|
||||
NUM5 = '5',
|
||||
NUM6 = '6',
|
||||
NUM7 = '7',
|
||||
NUM8 = '8',
|
||||
NUM9 = '9',
|
||||
KEY_NUM0 = '0';
|
||||
KEY_NUM1 = '1';
|
||||
KEY_NUM2 = '2';
|
||||
KEY_NUM3 = '3';
|
||||
KEY_NUM4 = '4';
|
||||
KEY_NUM5 = '5';
|
||||
KEY_NUM6 = '6';
|
||||
KEY_NUM7 = '7';
|
||||
KEY_NUM8 = '8';
|
||||
KEY_NUM9 = '9';
|
||||
|
||||
A = 'A',
|
||||
B = 'B',
|
||||
C = 'C',
|
||||
D = 'D',
|
||||
E = 'E',
|
||||
F = 'F',
|
||||
G = 'G',
|
||||
H = 'H',
|
||||
I = 'I',
|
||||
J = 'J',
|
||||
K = 'K',
|
||||
L = 'L',
|
||||
M = 'M',
|
||||
N = 'N',
|
||||
O = 'O',
|
||||
P = 'P',
|
||||
Q = 'Q',
|
||||
R = 'R',
|
||||
S = 'S',
|
||||
T = 'T',
|
||||
U = 'U',
|
||||
V = 'V',
|
||||
W = 'W',
|
||||
X = 'X',
|
||||
Y = 'Y',
|
||||
Z = 'Z',
|
||||
KEY_A = 'A';
|
||||
KEY_B = 'B';
|
||||
KEY_C = 'C';
|
||||
KEY_D = 'D';
|
||||
KEY_E = 'E';
|
||||
KEY_F = 'F';
|
||||
KEY_G = 'G';
|
||||
KEY_H = 'H';
|
||||
KEY_I = 'I';
|
||||
KEY_J = 'J';
|
||||
KEY_K = 'K';
|
||||
KEY_L = 'L';
|
||||
KEY_M = 'M';
|
||||
KEY_N = 'N';
|
||||
KEY_O = 'O';
|
||||
KEY_P = 'P';
|
||||
KEY_Q = 'Q';
|
||||
KEY_R = 'R';
|
||||
KEY_S = 'S';
|
||||
KEY_T = 'T';
|
||||
KEY_U = 'U';
|
||||
KEY_V = 'V';
|
||||
KEY_W = 'W';
|
||||
KEY_X = 'X';
|
||||
KEY_Y = 'Y';
|
||||
KEY_Z = 'Z';
|
||||
|
||||
LWIN = 0x5B,
|
||||
RWIN = 0x5C,
|
||||
APPS = 0x5D,
|
||||
KEY_LWIN = 0x5B;
|
||||
KEY_RWIN = 0x5C;
|
||||
KEY_APPS = 0x5D;
|
||||
|
||||
NUMPAD0 = 0x60,
|
||||
NUMPAD1 = 0x61,
|
||||
NUMPAD2 = 0x62,
|
||||
NUMPAD3 = 0x63,
|
||||
NUMPAD4 = 0x64,
|
||||
NUMPAD5 = 0x65,
|
||||
NUMPAD6 = 0x66,
|
||||
NUMPAD7 = 0x67,
|
||||
NUMPAD8 = 0x68,
|
||||
NUMPAD9 = 0x69,
|
||||
MULTIPLY = 0x6A,
|
||||
ADD = 0x6B,
|
||||
SEPARATOR = 0x6C,
|
||||
SUBTRACT = 0x6D,
|
||||
DECIMAL = 0x6E,
|
||||
DIVIDE = 0x6F,
|
||||
F1 = 0x70,
|
||||
F2 = 0x71,
|
||||
F3 = 0x72,
|
||||
F4 = 0x73,
|
||||
F5 = 0x74,
|
||||
F6 = 0x75,
|
||||
F7 = 0x76,
|
||||
F8 = 0x77,
|
||||
F9 = 0x78,
|
||||
F10 = 0x79,
|
||||
F11 = 0x7A,
|
||||
F12 = 0x7B,
|
||||
F13 = 0x7C,
|
||||
F14 = 0x7D,
|
||||
F15 = 0x7E,
|
||||
F16 = 0x7F,
|
||||
F17 = 0x80,
|
||||
F18 = 0x81,
|
||||
F19 = 0x82,
|
||||
F20 = 0x83,
|
||||
F21 = 0x84,
|
||||
F22 = 0x85,
|
||||
F23 = 0x86,
|
||||
F24 = 0x87,
|
||||
KEY_NUMPAD0 = 0x60;
|
||||
KEY_NUMPAD1 = 0x61;
|
||||
KEY_NUMPAD2 = 0x62;
|
||||
KEY_NUMPAD3 = 0x63;
|
||||
KEY_NUMPAD4 = 0x64;
|
||||
KEY_NUMPAD5 = 0x65;
|
||||
KEY_NUMPAD6 = 0x66;
|
||||
KEY_NUMPAD7 = 0x67;
|
||||
KEY_NUMPAD8 = 0x68;
|
||||
KEY_NUMPAD9 = 0x69;
|
||||
KEY_MULTIPLY = 0x6A;
|
||||
KEY_ADD = 0x6B;
|
||||
KEY_SEPARATOR = 0x6C;
|
||||
KEY_SUBTRACT = 0x6D;
|
||||
KEY_DECIMAL = 0x6E;
|
||||
KEY_DIVIDE = 0x6F;
|
||||
KEY_F1 = 0x70;
|
||||
KEY_F2 = 0x71;
|
||||
KEY_F3 = 0x72;
|
||||
KEY_F4 = 0x73;
|
||||
KEY_F5 = 0x74;
|
||||
KEY_F6 = 0x75;
|
||||
KEY_F7 = 0x76;
|
||||
KEY_F8 = 0x77;
|
||||
KEY_F9 = 0x78;
|
||||
KEY_F10 = 0x79;
|
||||
KEY_F11 = 0x7A;
|
||||
KEY_F12 = 0x7B;
|
||||
KEY_F13 = 0x7C;
|
||||
KEY_F14 = 0x7D;
|
||||
KEY_F15 = 0x7E;
|
||||
KEY_F16 = 0x7F;
|
||||
KEY_F17 = 0x80;
|
||||
KEY_F18 = 0x81;
|
||||
KEY_F19 = 0x82;
|
||||
KEY_F20 = 0x83;
|
||||
KEY_F21 = 0x84;
|
||||
KEY_F22 = 0x85;
|
||||
KEY_F23 = 0x86;
|
||||
KEY_F24 = 0x87;
|
||||
|
||||
NUMLOCK = 0x90,
|
||||
SCROLL = 0x91,
|
||||
KEY_NUMLOCK = 0x90;
|
||||
KEY_SCROLL = 0x91;
|
||||
|
||||
LSHIFT = 0xA0,
|
||||
RSHIFT = 0xA1,
|
||||
LCONTROL = 0xA2,
|
||||
RCONTROL = 0xA3,
|
||||
LMENU = 0xA4,
|
||||
RMENU = 0xA5,
|
||||
PROCESSKEY = 0xE5,
|
||||
ATTN = 0xF6,
|
||||
CRSEL = 0xF7,
|
||||
EXSEL = 0xF8,
|
||||
EREOF = 0xF9,
|
||||
PLAY = 0xFA,
|
||||
ZOOM = 0xFB,
|
||||
NONAME = 0xFC,
|
||||
PA1 = 0xFD,
|
||||
OEM_CLEAR = 0xFE,
|
||||
}
|
||||
KEY_LSHIFT = 0xA0;
|
||||
KEY_RSHIFT = 0xA1;
|
||||
KEY_LCONTROL = 0xA2;
|
||||
KEY_RCONTROL = 0xA3;
|
||||
KEY_LMENU = 0xA4;
|
||||
KEY_RMENU = 0xA5;
|
||||
KEY_PROCESSKEY = 0xE5;
|
||||
KEY_ATTN = 0xF6;
|
||||
KEY_CRSEL = 0xF7;
|
||||
KEY_EXSEL = 0xF8;
|
||||
KEY_EREOF = 0xF9;
|
||||
KEY_PLAY = 0xFA;
|
||||
KEY_ZOOM = 0xFB;
|
||||
KEY_NONAME = 0xFC;
|
||||
KEY_PA1 = 0xFD;
|
||||
KEY_OEM_CLEAR = 0xFE;
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user