| 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
|
|
|