diff options
| author | gingerBill <bill@gingerbill.org> | 2019-08-04 14:54:23 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2019-08-04 14:54:23 +0100 |
| commit | b04231dd95b6a80789b5e8762a51db4506948da1 (patch) | |
| tree | cf09cd610549feb4d89f17a1497a6f92bf892bfd /src/types.cpp | |
| parent | 37633c1d2a9cc2ab5ae659ffb359f7f56f0457a2 (diff) | |
Improve implementation of `intrinsics.type_*` procedures
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/types.cpp b/src/types.cpp index 76126f17f..e5d2509e0 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -1122,12 +1122,11 @@ bool is_type_integer_endian_big(Type *t) { return is_type_integer_endian_big(bit_set_to_int(t)); } else if (t->kind == Type_Pointer) { return is_type_integer_endian_big(&basic_types[Basic_uintptr]); - } else { - GB_PANIC("Unsupported type: %s", type_to_string(t)); } return build_context.endian_kind == TargetEndian_Big; } + bool is_type_integer_endian_little(Type *t) { t = core_type(t); if (t->kind == Type_Basic) { @@ -1141,11 +1140,24 @@ bool is_type_integer_endian_little(Type *t) { return is_type_integer_endian_little(bit_set_to_int(t)); } else if (t->kind == Type_Pointer) { return is_type_integer_endian_little(&basic_types[Basic_uintptr]); - } else { - GB_PANIC("Unsupported type: %s", type_to_string(t)); } return build_context.endian_kind == TargetEndian_Little; } +bool is_type_endian_big(Type *t) { + return is_type_integer_endian_big(t); +} +bool is_type_endian_little(Type *t) { + return is_type_integer_endian_little(t); +} + +bool is_type_dereferenceable(Type *t) { + if (is_type_rawptr(t)) { + return false; + } + return is_type_pointer(t); +} + + bool is_type_different_to_arch_endianness(Type *t) { switch (build_context.endian_kind) { |