Files
corelang/programs/language.kl
Krzosa Karol 523760dc0a get_type_info
2022-06-18 23:39:46 +02:00

72 lines
959 B
Plaintext

/*
String :: struct
str: *U8
len: S64
Slice :: struct
data: *void
len : S64
Any :: struct
data: *void
type: Type_ID
*/
Type_ID :: S32
Type_Info_Kind :: enum
NONE
S64 :: 7 // FIRST_NUMERIC
S32
S16
S8
INT
CHAR
U64
U32
U16
U8
F32
F64
POINTER
BOOL // LAST_NUMERIC
STRING
VOID
ARRAY
LAMBDA
STRUCT
UNION
ENUM
TYPE
SLICE
TUPLE
ANY
Type_Info_Struct_Member :: struct
name: String
type_id: Type_ID
offset: S32
Type_Info :: struct
kind: Type_Info_Kind
size: S32
align: S32
is_unsigned: Bool
type_id: Type_ID
base_type: Type_ID
array_size: S32
struct_member_count: S32
struct_members: *Type_Info_Struct_Member
lambda_argument_count: S32
lambda_arguments: *Type_Info
lambda_return: Type_ID
type_infos_len: S32 #foreign
type_infos : *Type_Info #foreign
get_type_info :: (id: Type_ID): *Type_Info
if id >= type_infos_len
return 0
return type_infos + id