get_type_info

This commit is contained in:
Krzosa Karol
2022-06-18 23:39:46 +02:00
parent 071a8de6a4
commit 523760dc0a
3 changed files with 37 additions and 28 deletions

View File

@@ -833,7 +833,8 @@ typedef struct String{
gen_ast(it); gen_ast(it);
} }
gen("Type_Info *type_infos = (Type_Info[]){"); genln("S32 type_infos_len = %d;", pctx->all_types.len);
genln("Type_Info *type_infos = (Type_Info[]){");
global_indent++; global_indent++;
For(pctx->all_types){ For(pctx->all_types){
genln("{/*%Q*/.kind = %d, .size = %d, .align = %d, .is_unsigned = %s, .type_id = %d, ", typestring(it), genln("{/*%Q*/.kind = %d, .size = %d, .align = %d, .is_unsigned = %s, .type_id = %d, ", typestring(it),

View File

@@ -16,32 +16,32 @@ Any :: struct
Type_ID :: S32 Type_ID :: S32
Type_Info_Kind :: enum Type_Info_Kind :: enum
TYPE_NONE NONE
TYPE_S64 :: 7 // FIRST_NUMERIC S64 :: 7 // FIRST_NUMERIC
TYPE_S32 S32
TYPE_S16 S16
TYPE_S8 S8
TYPE_INT INT
TYPE_CHAR CHAR
TYPE_U64 U64
TYPE_U32 U32
TYPE_U16 U16
TYPE_U8 U8
TYPE_F32 F32
TYPE_F64 F64
TYPE_POINTER POINTER
TYPE_BOOL // LAST_NUMERIC BOOL // LAST_NUMERIC
TYPE_STRING STRING
TYPE_VOID VOID
TYPE_ARRAY ARRAY
TYPE_LAMBDA LAMBDA
TYPE_STRUCT STRUCT
TYPE_UNION UNION
TYPE_ENUM ENUM
TYPE_TYPE TYPE
TYPE_SLICE SLICE
TYPE_TUPLE TUPLE
TYPE_ANY ANY
Type_Info_Struct_Member :: struct Type_Info_Struct_Member :: struct
name: String name: String
@@ -63,5 +63,10 @@ Type_Info :: struct
lambda_arguments: *Type_Info lambda_arguments: *Type_Info
lambda_return: Type_ID lambda_return: Type_ID
type_infos_len: U32 #foreign type_infos_len: S32 #foreign
type_infos : *Type_Info #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

View File

@@ -60,6 +60,9 @@ WinMain :: (hInstance: HINSTANCE, hPrevInstance: HINSTANCE, lpCmdLine: LPSTR, nS
if good_scheduling := false, timeBeginPeriod(1) == TIMERR_NOERROR if good_scheduling := false, timeBeginPeriod(1) == TIMERR_NOERROR
good_scheduling = true good_scheduling = true
char_info := get_type_info(5)
assert(char_info.kind == Type_Info_Kind.CHAR)
arena: Arena arena: Arena
window_name := string_to_string16(&arena, "Have a wonderful day! 豈 更 車 賈 滑 串 句 龜 ") window_name := string_to_string16(&arena, "Have a wonderful day! 豈 更 車 賈 滑 串 句 龜 ")
w := WNDCLASSW{ w := WNDCLASSW{