diff --git a/lib/std/core/builtin.c3 b/lib/std/core/builtin.c3 index cd81c7299..68ec4dbc3 100644 --- a/lib/std/core/builtin.c3 +++ b/lib/std/core/builtin.c3 @@ -47,8 +47,6 @@ macro varcast(variant v, $Type) @builtin return ($Type*)v.ptr; } -extern fn void printf(char*, ...); - struct CallstackElement { CallstackElement* prev; @@ -56,6 +54,7 @@ struct CallstackElement char* file; uint line; } + fn void panic(char* message, char *file, char *function, uint line) @builtin { CallstackElement* stack = $$stacktrace(); @@ -88,104 +87,12 @@ macro unreachable($string = "Unreachable statement reached.") @builtin @noreturn $$unreachable(); } - - -/* -enum TypeKind +macro bitcast(expr, $Type) @builtin { - VOID, - BOOL, - FLOAT, - INTEGER, - STRUCT, - UNION, - ERROR, - ENUM, - ARRAY, - POINTER, - VAR_ARRAY, - SUBARRAY, - OPAQUE - // ALIAS, + var $size = (usize)($sizeof(expr)); + $assert($size == $Type.sizeof, "Cannot bitcast between types of different size."); + $Type x = void; + memcpy(&x, &expr, $size, false, $alignof($Type), $alignof(expr)); + return x; } -struct TypeData -{ - typeid typeId; - TypeKind kind; - int size; - int alignment; - char* name; - char* fullName; -} - -struct TypeAlias -{ - TypeData data; - typeid aliasType; -} - -struct TypeError -{ - TypeData data; - TypeErrorValue[] errors; -} - -struct TypeArray -{ - TypeData data; - typeid elementType; - ulong elements; -} - -struct TypeVarArray -{ - TypeData data; - typeid elementType; -} - -struct TypeSubarray -{ - TypeData data; - typeid elementType; -} - -struct TypePointer -{ - TypeData data; - typeid baseType; -} - -struct TypeStruct -{ - TypeData data; - TypeData*[] fields; -} - -struct TypeUnion -{ - TypeData data; - TypeData*[] variants; -} - -struct TypeEnum -{ - TypeData data; - typeid valueType; - TypeData*[] associated_value_types; -} - - -struct TypeEnumValue -{ - char* name; - ulong value; - void*[] associated_values; -} - -struct TypeErrorValue -{ - char* name; - ulong value; -} -*/ \ No newline at end of file diff --git a/lib/std/core/mem.c3 b/lib/std/core/mem.c3 index 604b0a5db..0a5570a73 100644 --- a/lib/std/core/mem.c3 +++ b/lib/std/core/mem.c3 @@ -50,14 +50,7 @@ macro void memset(void* dst, char val, usize bytes, bool $is_volatile = false, u $$memset(dst, val, bytes, $is_volatile, $dst_align); } -macro bitcast(expr, $Type) -{ - var $size = (usize)($sizeof(expr)); - $assert($size == $Type.sizeof, "Cannot bitcast between types of different size."); - $Type x = void; - @memcpy(&x, &expr, $size, false, $alignof($Type), $alignof(expr)); - return x; -} + enum AllocationKind