diff options
| author | ftphikari <ftphikari@gmail.com> | 2022-09-27 11:06:05 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-27 11:06:05 +0300 |
| commit | eb6c388f139607716acf02b0f6e1cd25a5128aad (patch) | |
| tree | 6b19bfb6aeceabb1d0b6adb81be84b658a8505ba /src/types.cpp | |
| parent | 42144d957b45e29be1da74a98cfaaf465bfc9861 (diff) | |
| parent | 0fe006157e6e6f07722bcf4eb7c51a8db07d008c (diff) | |
Merge branch 'odin-lang:master' into master
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/types.cpp b/src/types.cpp index e917d30fa..fec324bf4 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -227,7 +227,6 @@ struct TypeProc { Type *key; \ Type *value; \ Type *entry_type; \ - Type *generated_struct_type; \ Type *internal_type; \ Type *lookup_result_type; \ }) \ @@ -688,6 +687,7 @@ gb_global Type *t_source_code_location_ptr = nullptr; gb_global Type *t_map_hash = nullptr; gb_global Type *t_map_header = nullptr; +gb_global Type *t_map_header_table = nullptr; gb_global Type *t_equal_proc = nullptr; @@ -2107,6 +2107,9 @@ bool is_type_polymorphic(Type *t, bool or_specialized=false) { case Type_Pointer: return is_type_polymorphic(t->Pointer.elem, or_specialized); + case Type_MultiPointer: + return is_type_polymorphic(t->MultiPointer.elem, or_specialized); + case Type_SoaPointer: return is_type_polymorphic(t->SoaPointer.elem, or_specialized); @@ -2130,6 +2133,15 @@ bool is_type_polymorphic(Type *t, bool or_specialized=false) { case Type_Slice: return is_type_polymorphic(t->Slice.elem, or_specialized); + case Type_Matrix: + if (t->Matrix.generic_row_count != nullptr) { + return true; + } + if (t->Matrix.generic_column_count != nullptr) { + return true; + } + return is_type_polymorphic(t->Matrix.elem, or_specialized); + case Type_Tuple: for_array(i, t->Tuple.variables) { if (is_type_polymorphic(t->Tuple.variables[i]->type, or_specialized)) { @@ -2196,6 +2208,34 @@ bool is_type_polymorphic(Type *t, bool or_specialized=false) { } break; + case Type_BitSet: + if (is_type_polymorphic(t->BitSet.elem, or_specialized)) { + return true; + } + if (t->BitSet.underlying != nullptr && + is_type_polymorphic(t->BitSet.underlying, or_specialized)) { + return true; + } + break; + + case Type_RelativeSlice: + if (is_type_polymorphic(t->RelativeSlice.slice_type, or_specialized)) { + return true; + } + if (t->RelativeSlice.base_integer != nullptr && + is_type_polymorphic(t->RelativeSlice.base_integer, or_specialized)) { + return true; + } + break; + case Type_RelativePointer: + if (is_type_polymorphic(t->RelativePointer.pointer_type, or_specialized)) { + return true; + } + if (t->RelativePointer.base_integer != nullptr && + is_type_polymorphic(t->RelativePointer.base_integer, or_specialized)) { + return true; + } + break; } return false; |