aboutsummaryrefslogtreecommitdiff
path: root/src/types.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-08-04 14:54:23 +0100
committergingerBill <bill@gingerbill.org>2019-08-04 14:54:23 +0100
commitb04231dd95b6a80789b5e8762a51db4506948da1 (patch)
treecf09cd610549feb4d89f17a1497a6f92bf892bfd /src/types.cpp
parent37633c1d2a9cc2ab5ae659ffb359f7f56f0457a2 (diff)
Improve implementation of `intrinsics.type_*` procedures
Diffstat (limited to 'src/types.cpp')
-rw-r--r--src/types.cpp20
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) {