diff --git a/ccodegen.cpp b/ccodegen.cpp index 401065c..82c962b 100644 --- a/ccodegen.cpp +++ b/ccodegen.cpp @@ -833,7 +833,8 @@ typedef struct String{ 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++; For(pctx->all_types){ genln("{/*%Q*/.kind = %d, .size = %d, .align = %d, .is_unsigned = %s, .type_id = %d, ", typestring(it), diff --git a/programs/language.kl b/programs/language.kl index bdfc110..c726548 100644 --- a/programs/language.kl +++ b/programs/language.kl @@ -16,32 +16,32 @@ Any :: struct Type_ID :: S32 Type_Info_Kind :: enum - TYPE_NONE - TYPE_S64 :: 7 // FIRST_NUMERIC - TYPE_S32 - TYPE_S16 - TYPE_S8 - TYPE_INT - TYPE_CHAR - TYPE_U64 - TYPE_U32 - TYPE_U16 - TYPE_U8 - TYPE_F32 - TYPE_F64 - TYPE_POINTER - TYPE_BOOL // LAST_NUMERIC - TYPE_STRING - TYPE_VOID - TYPE_ARRAY - TYPE_LAMBDA - TYPE_STRUCT - TYPE_UNION - TYPE_ENUM - TYPE_TYPE - TYPE_SLICE - TYPE_TUPLE - TYPE_ANY + 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 @@ -63,5 +63,10 @@ Type_Info :: struct lambda_arguments: *Type_Info lambda_return: Type_ID -type_infos_len: U32 #foreign +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 \ No newline at end of file diff --git a/programs/main.kl b/programs/main.kl index 5a8d313..1655f06 100644 --- a/programs/main.kl +++ b/programs/main.kl @@ -60,6 +60,9 @@ WinMain :: (hInstance: HINSTANCE, hPrevInstance: HINSTANCE, lpCmdLine: LPSTR, nS if good_scheduling := false, timeBeginPeriod(1) == TIMERR_NOERROR good_scheduling = true + char_info := get_type_info(5) + assert(char_info.kind == Type_Info_Kind.CHAR) + arena: Arena window_name := string_to_string16(&arena, "Have a wonderful day! 豈 更 車 賈 滑 串 句 龜 ") w := WNDCLASSW{