diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2022-02-15 15:47:24 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-15 15:47:24 +0000 |
| commit | f5697dd7f2e71411957faf9fa620e62363491083 (patch) | |
| tree | 931db0d1c595326524bd7a541b0fb2c6d4a7f186 /src/types.cpp | |
| parent | 6223f48c3fc096b543a51aa1c993a6f1127f2a0f (diff) | |
| parent | a23ee1edc16dc447b9e342ba56b5871e0424082e (diff) | |
Merge branch 'master' into odin-global-constants-as-enums
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp index 07951196a..9ee6ba359 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -221,6 +221,7 @@ struct TypeProc { ExactValue *max_value; \ i64 count; \ TokenKind op; \ + bool is_sparse; \ }) \ TYPE_KIND(Slice, struct { Type *elem; }) \ TYPE_KIND(DynamicArray, struct { Type *elem; }) \ @@ -362,6 +363,7 @@ enum TypeInfoFlag : u32 { enum : int { MATRIX_ELEMENT_COUNT_MIN = 1, MATRIX_ELEMENT_COUNT_MAX = 16, + MATRIX_ELEMENT_MAX_SIZE = MATRIX_ELEMENT_COUNT_MAX * (2 * 8), // complex128 }; @@ -1582,6 +1584,24 @@ Type *core_array_type(Type *t) { } } +i32 type_math_rank(Type *t) { + i32 rank = 0; + for (;;) { + t = base_type(t); + switch (t->kind) { + case Type_Array: + rank += 1; + t = t->Array.elem; + break; + case Type_Matrix: + rank += 2; + t = t->Matrix.elem; + break; + default: + return rank; + } + } +} Type *base_complex_elem_type(Type *t) { @@ -3830,6 +3850,9 @@ gbString write_type_to_string(gbString str, Type *type) { break; case Type_EnumeratedArray: + if (type->EnumeratedArray.is_sparse) { + str = gb_string_appendc(str, "#sparse"); + } str = gb_string_append_rune(str, '['); str = write_type_to_string(str, type->EnumeratedArray.index); str = gb_string_append_rune(str, ']'); |