diff options
| author | gingerBill <bill@gingerbill.org> | 2022-02-06 11:42:59 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-02-06 11:42:59 +0000 |
| commit | 19aec13a1060a521913abc6bd669080171d43594 (patch) | |
| tree | 2995c7f26a5a1fc19a977845542281481fc12399 /src/types.cpp | |
| parent | e896956275bf7177e93795ab3cbb7069e5d05ff2 (diff) | |
Support rank-2 arrays (matrix-like) for `transpose`
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp index e0d35a12c..9ee6ba359 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -363,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 }; @@ -1583,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) { |