diff options
| author | gingerBill <bill@gingerbill.org> | 2018-02-28 11:20:11 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-02-28 11:20:11 +0000 |
| commit | d3ea334e7ab2897bbc948acc57aa9ba073304215 (patch) | |
| tree | 8f6016ab7bd62c0320c893e0cb7fa6337054420f /src/types.cpp | |
| parent | 223c473cf64845f0c0824375fa98ca51bad66fc1 (diff) | |
`cstring`
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/types.cpp b/src/types.cpp index 239a530d1..c0254729f 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -34,8 +34,9 @@ enum BasicKind { Basic_uint, Basic_uintptr, Basic_rawptr, - Basic_string, // ^u8 + int - Basic_any, // rawptr + ^Type_Info + Basic_string, // ^u8 + int + Basic_cstring, // ^u8 + Basic_any, // rawptr + ^Type_Info Basic_UntypedBool, Basic_UntypedInteger, @@ -277,6 +278,7 @@ gb_global Type basic_types[] = { {Type_Basic, {Basic_rawptr, BasicFlag_Pointer, -1, STR_LIT("rawptr")}}, {Type_Basic, {Basic_string, BasicFlag_String, -1, STR_LIT("string")}}, + {Type_Basic, {Basic_cstring, BasicFlag_String, -1, STR_LIT("cstring")}}, {Type_Basic, {Basic_any, 0, -1, STR_LIT("any")}}, {Type_Basic, {Basic_UntypedBool, BasicFlag_Boolean | BasicFlag_Untyped, 0, STR_LIT("untyped bool")}}, @@ -322,6 +324,7 @@ gb_global Type *t_uintptr = &basic_types[Basic_uintptr]; gb_global Type *t_rawptr = &basic_types[Basic_rawptr]; 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_untyped_bool = &basic_types[Basic_UntypedBool]; @@ -690,6 +693,13 @@ bool is_type_string(Type *t) { } return false; } +bool is_type_cstring(Type *t) { + t = base_type(t); + if (t->kind == Type_Basic) { + return t->Basic.kind == Basic_cstring; + } + return false; +} bool is_type_typed(Type *t) { t = base_type(t); if (t == nullptr) { @@ -802,6 +812,13 @@ bool is_type_u8_slice(Type *t) { } return false; } +bool is_type_u8_ptr(Type *t) { + t = base_type(t); + if (t->kind == Type_Pointer) { + return is_type_u8(t->Slice.elem); + } + return false; +} bool is_type_proc(Type *t) { t = base_type(t); return t->kind == Type_Proc; @@ -933,7 +950,7 @@ bool is_type_indexable(Type *t) { Type *bt = base_type(t); switch (bt->kind) { case Type_Basic: - return is_type_string(bt); + return bt->Basic.kind == Basic_string; case Type_Array: case Type_Slice: case Type_DynamicArray: @@ -1101,6 +1118,8 @@ bool is_type_comparable(Type *t) { return false; case Basic_rune: return true; + case Basic_cstring: + return false; } return true; case Type_Pointer: @@ -1849,8 +1868,9 @@ i64 type_align_of_internal(gbAllocator allocator, Type *t, TypePath *path) { case Type_Basic: { GB_ASSERT(is_type_typed(t)); switch (t->Basic.kind) { - case Basic_string: return build_context.word_size; - case Basic_any: return build_context.word_size; + 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_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: return build_context.word_size; @@ -2048,8 +2068,9 @@ i64 type_size_of_internal(gbAllocator allocator, Type *t, TypePath *path) { return size; } switch (kind) { - case Basic_string: return 2*build_context.word_size; - case Basic_any: return 2*build_context.word_size; + 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_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: return build_context.word_size; |