diff options
| author | gingerBill <bill@gingerbill.org> | 2018-12-02 19:27:42 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-12-02 19:27:42 +0000 |
| commit | 17b0e3a1a1017a3f2afc8fd47fc7451d65eb33cd (patch) | |
| tree | f028923c2bb40dbcc7b22eb1327b0446fe28686e /src/types.cpp | |
| parent | 28583bfff88ff1378a0e71030701071dcfd37462 (diff) | |
Fix bit sets with custom endian underlying type
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/types.cpp b/src/types.cpp index b2dca25bd..09fdce3f1 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -500,7 +500,7 @@ i64 type_align_of (Type *t); i64 type_offset_of (Type *t, i32 index); gbString type_to_string (Type *type); void init_map_internal_types(Type *type); - +Type * bit_set_to_int(Type *t); Type *base_type(Type *t) { @@ -1037,7 +1037,7 @@ bool is_type_integer_endian_big(Type *t) { } return build_context.endian_kind == TargetEndian_Big; } else if (t->kind == Type_BitSet) { - return is_type_integer_endian_big(t->BitSet.elem); + return is_type_integer_endian_big(bit_set_to_int(t)); } else { GB_PANIC("Unsupported type: %s", type_to_string); } @@ -1054,7 +1054,7 @@ bool is_type_integer_endian_little(Type *t) { } return build_context.endian_kind == TargetEndian_Little; } else if (t->kind == Type_BitSet) { - return is_type_integer_endian_little(t->BitSet.elem); + return is_type_integer_endian_little(bit_set_to_int(t)); } else { GB_PANIC("Unsupported type: %s", type_to_string); } @@ -1074,7 +1074,7 @@ bool is_type_different_to_arch_endianness(Type *t) { Type *integer_endian_type_to_platform_type(Type *t) { t = core_type(t); if (t->kind == Type_BitSet) { - t = core_type(t->BitSet.elem); + t = bit_set_to_int(t); } GB_ASSERT(t->kind == Type_Basic); @@ -2919,6 +2919,10 @@ gbString write_type_to_string(gbString str, Type *type) { case Type_BitSet: str = gb_string_appendc(str, "bit_set["); str = write_type_to_string(str, type->BitSet.elem); + if (type->BitSet.underlying != nullptr) { + str = gb_string_appendc(str, "; "); + str = write_type_to_string(str, type->BitSet.underlying); + } str = gb_string_appendc(str, "]"); break; } |