diff --git a/src/base/type_system/ktDescriptor.h b/src/base/type_system/ktDescriptor.h index 31e4ee8..189160a 100644 --- a/src/base/type_system/ktDescriptor.h +++ b/src/base/type_system/ktDescriptor.h @@ -13,21 +13,21 @@ extern "C" { extern ktDescriptor ktDescriptor_##TYPE; \ extern ktDescriptor ktDescriptor_##TYPE##_Ptr; -#define kt_define(TYPE, FREE_FUNC, TOSTRING_FUNC)\ +#define kt_define(TYPE, FREE_MEMBERS_F, TOSTRING_F)\ ktid_define(TYPE); \ ktDescriptor ktDescriptor_##TYPE={ \ .name=#TYPE, \ .id=ktid_undefined, \ .size=sizeof(TYPE), \ - .freeMembers=FREE_FUNC, \ - .toString=TOSTRING_FUNC \ + .freeMembers=FREE_MEMBERS_F, \ + .toString=TOSTRING_F \ }; \ ktDescriptor ktDescriptor_##TYPE##_Ptr={\ .name=#TYPE "_Ptr", \ .id=ktid_undefined, \ .size=sizeof(TYPE), \ - .freeMembers=FREE_FUNC, \ - .toString=TOSTRING_FUNC \ + .freeMembers=FREE_MEMBERS_F, \ + .toString=TOSTRING_F \ }; typedef void (*freeMembers_t)(void*); diff --git a/src/base/type_system/kt_functions.c b/src/base/type_system/kt_functions.c index 8ced590..b4780c9 100644 --- a/src/base/type_system/kt_functions.c +++ b/src/base/type_system/kt_functions.c @@ -34,11 +34,11 @@ ktDescriptorsState initState=NotInitialized; void kt_beginInit(){ kprintf("\e[94mtype descriptors initializing...\n"); __descriptorPointers=Autoarr_create(Pointer, 256, 256); - if(__descriptorPointers==NULL) - throw(ERR_NULLPTR); } void kt_endInit(){ + if(__descriptorPointers==NULL) + throw(ERR_NULLPTR); typeDescriptors=(ktDescriptor**)Autoarr_toArray(__descriptorPointers); Autoarr_free(__descriptorPointers,true); if(typeDescriptors==NULL) throw(ERR_NULLPTR); diff --git a/src/base/type_system/unitype.h b/src/base/type_system/unitype.h index 3d617fe..aeb2372 100644 --- a/src/base/type_system/unitype.h +++ b/src/base/type_system/unitype.h @@ -21,25 +21,24 @@ STRUCT(Unitype, ) -#define __UniDef(FIELD, TYPE, VAL) (Unitype){ \ - .FIELD=VAL, .typeId=ktid_name(TYPE), .allocatedInHeap=false} +#define __UniDef(FIELD, TYPE, VAL) ((Unitype){ \ + .FIELD=VAL, .typeId=ktid_name(TYPE), .allocatedInHeap=false}) #define UniInt64(VAL) __UniDef(Int64, i64, VAL) #define UniUInt64(VAL) __UniDef(UInt64, u64, VAL) #define UniFloat64(VAL) __UniDef(Float64, f64, VAL) #define UniBool(VAL) __UniDef(Bool, bool, VAL) -#define UniStackPtr(TYPE, VAL) (Unitype){ \ - .VoidPtr=VAL, .typeId=ktid_ptrName(TYPE), .allocatedInHeap=false} -#define UniHeapPtr(TYPE, VAL) (Unitype){ \ - .VoidPtr=VAL, .typeId=ktid_ptrName(TYPE), .allocatedInHeap=true} - +#define UniPtr(TYPE_ID, VAL, ALLOCATED_ON_HEAP)((Unitype){ \ + .VoidPtr=VAL, .typeId=TYPE_ID, .allocatedInHeap=ALLOCATED_ON_HEAP }) +#define UniStackPtr(TYPE, VAL) UniPtr(ktid_ptrName(TYPE), VAL, false) +#define UniHeapPtr(TYPE, VAL) UniPtr(ktid_ptrName(TYPE), VAL, true) // 0==ktid_Pointer -#define UniNull (Unitype){.Int64=0, .typeId=0, .allocatedInHeap=false} +#define UniNull ((Unitype){.Int64=0, .typeId=0, .allocatedInHeap=false}) #define UniTrue UniBool(true) #define UniFalse UniBool(false) -#define Unitype_isUniNull(UNI) (UNI.typeId==ktid_Pointer && UNI.VoidPtr==NULL) +#define Unitype_isUniNull(UNI) (UNI.typeId==0 && UNI.Int64==0) // frees VoidPtr value or does nothing if type isn't pointer void Unitype_free(Unitype u);