some type_system changes
This commit is contained in:
parent
f32306a6d5
commit
27be5beacd
@ -13,21 +13,21 @@ extern "C" {
|
|||||||
extern ktDescriptor ktDescriptor_##TYPE; \
|
extern ktDescriptor ktDescriptor_##TYPE; \
|
||||||
extern ktDescriptor ktDescriptor_##TYPE##_Ptr;
|
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); \
|
ktid_define(TYPE); \
|
||||||
ktDescriptor ktDescriptor_##TYPE={ \
|
ktDescriptor ktDescriptor_##TYPE={ \
|
||||||
.name=#TYPE, \
|
.name=#TYPE, \
|
||||||
.id=ktid_undefined, \
|
.id=ktid_undefined, \
|
||||||
.size=sizeof(TYPE), \
|
.size=sizeof(TYPE), \
|
||||||
.freeMembers=FREE_FUNC, \
|
.freeMembers=FREE_MEMBERS_F, \
|
||||||
.toString=TOSTRING_FUNC \
|
.toString=TOSTRING_F \
|
||||||
}; \
|
}; \
|
||||||
ktDescriptor ktDescriptor_##TYPE##_Ptr={\
|
ktDescriptor ktDescriptor_##TYPE##_Ptr={\
|
||||||
.name=#TYPE "_Ptr", \
|
.name=#TYPE "_Ptr", \
|
||||||
.id=ktid_undefined, \
|
.id=ktid_undefined, \
|
||||||
.size=sizeof(TYPE), \
|
.size=sizeof(TYPE), \
|
||||||
.freeMembers=FREE_FUNC, \
|
.freeMembers=FREE_MEMBERS_F, \
|
||||||
.toString=TOSTRING_FUNC \
|
.toString=TOSTRING_F \
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*freeMembers_t)(void*);
|
typedef void (*freeMembers_t)(void*);
|
||||||
|
|||||||
@ -34,11 +34,11 @@ ktDescriptorsState initState=NotInitialized;
|
|||||||
void kt_beginInit(){
|
void kt_beginInit(){
|
||||||
kprintf("\e[94mtype descriptors initializing...\n");
|
kprintf("\e[94mtype descriptors initializing...\n");
|
||||||
__descriptorPointers=Autoarr_create(Pointer, 256, 256);
|
__descriptorPointers=Autoarr_create(Pointer, 256, 256);
|
||||||
if(__descriptorPointers==NULL)
|
|
||||||
throw(ERR_NULLPTR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void kt_endInit(){
|
void kt_endInit(){
|
||||||
|
if(__descriptorPointers==NULL)
|
||||||
|
throw(ERR_NULLPTR);
|
||||||
typeDescriptors=(ktDescriptor**)Autoarr_toArray(__descriptorPointers);
|
typeDescriptors=(ktDescriptor**)Autoarr_toArray(__descriptorPointers);
|
||||||
Autoarr_free(__descriptorPointers,true);
|
Autoarr_free(__descriptorPointers,true);
|
||||||
if(typeDescriptors==NULL) throw(ERR_NULLPTR);
|
if(typeDescriptors==NULL) throw(ERR_NULLPTR);
|
||||||
|
|||||||
@ -21,25 +21,24 @@ STRUCT(Unitype,
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
#define __UniDef(FIELD, TYPE, VAL) (Unitype){ \
|
#define __UniDef(FIELD, TYPE, VAL) ((Unitype){ \
|
||||||
.FIELD=VAL, .typeId=ktid_name(TYPE), .allocatedInHeap=false}
|
.FIELD=VAL, .typeId=ktid_name(TYPE), .allocatedInHeap=false})
|
||||||
|
|
||||||
#define UniInt64(VAL) __UniDef(Int64, i64, VAL)
|
#define UniInt64(VAL) __UniDef(Int64, i64, VAL)
|
||||||
#define UniUInt64(VAL) __UniDef(UInt64, u64, VAL)
|
#define UniUInt64(VAL) __UniDef(UInt64, u64, VAL)
|
||||||
#define UniFloat64(VAL) __UniDef(Float64, f64, VAL)
|
#define UniFloat64(VAL) __UniDef(Float64, f64, VAL)
|
||||||
#define UniBool(VAL) __UniDef(Bool, bool, VAL)
|
#define UniBool(VAL) __UniDef(Bool, bool, VAL)
|
||||||
|
|
||||||
#define UniStackPtr(TYPE, VAL) (Unitype){ \
|
#define UniPtr(TYPE_ID, VAL, ALLOCATED_ON_HEAP)((Unitype){ \
|
||||||
.VoidPtr=VAL, .typeId=ktid_ptrName(TYPE), .allocatedInHeap=false}
|
.VoidPtr=VAL, .typeId=TYPE_ID, .allocatedInHeap=ALLOCATED_ON_HEAP })
|
||||||
#define UniHeapPtr(TYPE, VAL) (Unitype){ \
|
#define UniStackPtr(TYPE, VAL) UniPtr(ktid_ptrName(TYPE), VAL, false)
|
||||||
.VoidPtr=VAL, .typeId=ktid_ptrName(TYPE), .allocatedInHeap=true}
|
#define UniHeapPtr(TYPE, VAL) UniPtr(ktid_ptrName(TYPE), VAL, true)
|
||||||
|
|
||||||
// 0==ktid_Pointer
|
// 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 UniTrue UniBool(true)
|
||||||
#define UniFalse UniBool(false)
|
#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
|
// frees VoidPtr value or does nothing if type isn't pointer
|
||||||
void Unitype_free(Unitype u);
|
void Unitype_free(Unitype u);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user