Chromium Code Reviews| Index: src/types.cc |
| diff --git a/src/types.cc b/src/types.cc |
| index 9c576c07de9714c5aa9d24b5d39575ecadb45e85..fd85db580af9465aef1526553b7818b0999ac88c 100644 |
| --- a/src/types.cc |
| +++ b/src/types.cc |
| @@ -525,25 +525,36 @@ 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 (unsigned i = 0; i < sizeof(bitset)*8; ++i) { |
|
Toon Verwaest
2013/11/18 17:05:46
8 -> kBitsPerByte
Could also just do >>1 until th
rossberg
2013/11/18 17:37:03
Good idea (I don't even see why I still need i the
|
| + int mask = (1 << i); |
| + 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 +564,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 |