/* 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