Index: src/types.cc |
diff --git a/src/types.cc b/src/types.cc |
index 9c576c07de9714c5aa9d24b5d39575ecadb45e85..7c54d4fb27e7db94b06c1726a9e07678bc8ead80 100644 |
--- a/src/types.cc |
+++ b/src/types.cc |
@@ -525,25 +525,35 @@ void Type::TypePrint() { |
} |
+const char* Type::bitset_name(int bitset) { |
+ switch (bitset) { |
+ #define PRINT_COMPOSED_TYPE(type, value) case k##type: return #type; |
+ BITSET_TYPE_LIST(PRINT_COMPOSED_TYPE) |
+ #undef PRINT_COMPOSED_TYPE |
+ default: |
+ return NULL; |
+ } |
+} |
+ |
+ |
void Type::TypePrint(FILE* out) { |
if (is_bitset()) { |
- int val = as_bitset(); |
- const char* composed_name = GetComposedName(val); |
- if (composed_name != NULL) { |
- PrintF(out, "%s", composed_name); |
- return; |
- } |
- bool first_entry = true; |
- PrintF(out, "{"); |
- for (unsigned i = 0; i < sizeof(val)*8; ++i) { |
- int mask = (1 << i); |
- if ((val & mask) != 0) { |
- if (!first_entry) PrintF(out, ","); |
- first_entry = false; |
- PrintF(out, "%s", GetPrimitiveName(mask)); |
+ int bitset = as_bitset(); |
+ const char* name = bitset_name(bitset); |
+ if (name != NULL) { |
+ PrintF(out, "%s", name); |
+ } else { |
+ bool is_first = true; |
+ PrintF(out, "("); |
+ for (int mask = 1; mask != 0; mask = mask << 1) { |
+ if ((bitset & mask) != 0) { |
+ if (!is_first) PrintF(out, " | "); |
+ is_first = false; |
+ PrintF(out, "%s", bitset_name(mask)); |
+ } |
} |
+ PrintF(out, ")"); |
} |
- PrintF(out, "}"); |
} else if (is_constant()) { |
PrintF(out, "Constant(%p : ", static_cast<void*>(*as_constant())); |
from_bitset(LubBitset())->TypePrint(out); |
@@ -553,14 +563,14 @@ void Type::TypePrint(FILE* out) { |
from_bitset(LubBitset())->TypePrint(out); |
PrintF(")"); |
} else if (is_union()) { |
- PrintF(out, "{"); |
+ PrintF(out, "("); |
Handle<Unioned> unioned = as_union(); |
for (int i = 0; i < unioned->length(); ++i) { |
Handle<Type> type_i = union_get(unioned, i); |
- if (i > 0) PrintF(out, ","); |
+ if (i > 0) PrintF(out, " | "); |
type_i->TypePrint(out); |
} |
- PrintF(out, "}"); |
+ PrintF(out, ")"); |
} |
} |
#endif |