diff options
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/types.cpp b/src/types.cpp index 33ba05a2a..b5ed0a885 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -38,6 +38,8 @@ enum BasicKind { Basic_cstring, // ^u8 Basic_any, // rawptr + ^Type_Info + Basic_typeid, + Basic_UntypedBool, Basic_UntypedInteger, Basic_UntypedFloat, @@ -283,6 +285,8 @@ gb_global Type basic_types[] = { {Type_Basic, {Basic_cstring, BasicFlag_String, -1, STR_LIT("cstring")}}, {Type_Basic, {Basic_any, 0, -1, STR_LIT("any")}}, + {Type_Basic, {Basic_typeid, 0, -1, STR_LIT("typeid")}}, + {Type_Basic, {Basic_UntypedBool, BasicFlag_Boolean | BasicFlag_Untyped, 0, STR_LIT("untyped bool")}}, {Type_Basic, {Basic_UntypedInteger, BasicFlag_Integer | BasicFlag_Untyped, 0, STR_LIT("untyped integer")}}, {Type_Basic, {Basic_UntypedFloat, BasicFlag_Float | BasicFlag_Untyped, 0, STR_LIT("untyped float")}}, @@ -329,6 +333,8 @@ gb_global Type *t_string = &basic_types[Basic_string]; gb_global Type *t_cstring = &basic_types[Basic_cstring]; gb_global Type *t_any = &basic_types[Basic_any]; +gb_global Type *t_typeid = &basic_types[Basic_typeid]; + gb_global Type *t_untyped_bool = &basic_types[Basic_UntypedBool]; gb_global Type *t_untyped_integer = &basic_types[Basic_UntypedInteger]; gb_global Type *t_untyped_float = &basic_types[Basic_UntypedFloat]; @@ -360,6 +366,7 @@ gb_global Type *t_type_info_rune = nullptr; gb_global Type *t_type_info_float = nullptr; gb_global Type *t_type_info_complex = nullptr; gb_global Type *t_type_info_any = nullptr; +gb_global Type *t_type_info_typeid = nullptr; gb_global Type *t_type_info_string = nullptr; gb_global Type *t_type_info_boolean = nullptr; gb_global Type *t_type_info_pointer = nullptr; @@ -381,6 +388,7 @@ gb_global Type *t_type_info_float_ptr = nullptr; gb_global Type *t_type_info_complex_ptr = nullptr; gb_global Type *t_type_info_quaternion_ptr = nullptr; gb_global Type *t_type_info_any_ptr = nullptr; +gb_global Type *t_type_info_typeid_ptr = nullptr; gb_global Type *t_type_info_string_ptr = nullptr; gb_global Type *t_type_info_boolean_ptr = nullptr; gb_global Type *t_type_info_pointer_ptr = nullptr; @@ -1128,6 +1136,8 @@ bool is_type_comparable(Type *t) { return true; case Basic_cstring: return false; + case Basic_typeid: + return true; } return true; case Type_Pointer: @@ -1334,7 +1344,7 @@ Type *default_type(Type *type) { return type; } - +/* // NOTE(bill): Valid Compile time execution #run type bool is_type_cte_safe(Type *type) { type = default_type(base_type(type)); @@ -1392,7 +1402,7 @@ bool is_type_cte_safe(Type *type) { return false; } - + */ i64 union_variant_index(Type *u, Type *v) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); @@ -1884,6 +1894,7 @@ i64 type_align_of_internal(Type *t, TypePath *path) { case Basic_string: return build_context.word_size; case Basic_cstring: return build_context.word_size; case Basic_any: return build_context.word_size; + case Basic_typeid: return build_context.word_size; case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: return build_context.word_size; @@ -2085,6 +2096,7 @@ i64 type_size_of_internal(Type *t, TypePath *path) { case Basic_string: return 2*build_context.word_size; case Basic_cstring: return build_context.word_size; case Basic_any: return 2*build_context.word_size; + case Basic_typeid: return build_context.word_size; case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: return build_context.word_size; |