Index: src/types.cc |
diff --git a/src/types.cc b/src/types.cc |
index c4e32f7823e6a15ac684a163c864b5de929bcc25..fa1bac6dd5319d3923202a16fcf1538a5b09943c 100644 |
--- a/src/types.cc |
+++ b/src/types.cc |
@@ -21,26 +21,9 @@ int TypeImpl<Config>::BitsetType::Glb(TypeImpl* type) { |
return type->AsBitset(); |
} else if (type->IsUnion()) { |
UnionHandle unioned = handle(type->AsUnion()); |
- int bitset = kNone; |
- for (int i = 0; i < unioned->Length(); ++i) { |
- bitset |= unioned->Get(i)->BitsetGlb(); |
- } |
- return bitset; |
- } else if (type->IsClass()) { |
- // Little hack to avoid the need for a region for handlification here... |
- return REPRESENTATION(Config::is_class(type) |
- ? Lub(*Config::as_class(type)) |
- : type->AsClass()->Bound(NULL)->AsBitset()); |
- } else if (type->IsConstant()) { |
- return REPRESENTATION(type->AsConstant()->Bound()->AsBitset()); |
- } else if (type->IsContext()) { |
- return REPRESENTATION(type->AsContext()->Bound()->AsBitset()); |
- } else if (type->IsArray()) { |
- return REPRESENTATION(type->AsArray()->Bound()->AsBitset()); |
- } else if (type->IsFunction()) { |
- return REPRESENTATION(type->AsFunction()->Bound()->AsBitset()); |
+ DCHECK(unioned->Wellformed()); |
+ return unioned->Get(0)->BitsetGlb(); // Other BitsetGlb's are kNone anyway. |
} else { |
- UNREACHABLE(); |
return kNone; |
} |
} |
@@ -260,10 +243,6 @@ bool TypeImpl<Config>::SlowIs(TypeImpl* that) { |
if (that->IsBitset()) { |
return BitsetType::Is(BitsetType::Lub(this), that->AsBitset()); |
} |
- if (this->IsBitset() && SEMANTIC(this->AsBitset()) == BitsetType::kNone) { |
- // Bitsets only have non-bitset supertypes along the representation axis. |
- return BitsetType::Is(this->AsBitset(), that->BitsetGlb()); |
- } |
if (that->IsClass()) { |
return this->IsClass() |
@@ -555,26 +534,6 @@ int TypeImpl<Config>::ExtendUnion( |
} |
-// If bitset is subsumed by another entry in the result, remove it. |
-// (Only bitsets with empty semantic axis can be subtypes of non-bitsets.) |
-template<class Config> |
-int TypeImpl<Config>::NormalizeUnion(UnionHandle result, int size, int bitset) { |
- if (bitset != BitsetType::kNone && SEMANTIC(bitset) == BitsetType::kNone) { |
- for (int i = 1; i < size; ++i) { |
- int glb = result->Get(i)->BitsetGlb(); |
- if (BitsetType::Is(bitset, glb)) { |
- for (int j = 1; j < size; ++j) { |
- result->Set(j - 1, result->Get(j)); |
- } |
- --size; |
- break; |
- } |
- } |
- } |
- return size; |
-} |
- |
- |
// Union is O(1) on simple bitsets, but O(n*m) on structured unions. |
template<class Config> |
typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Union( |
@@ -613,7 +572,6 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Union( |
} |
size = ExtendUnion(unioned, size, type1, type2, false, region); |
size = ExtendUnion(unioned, size, type2, type1, false, region); |
- size = NormalizeUnion(unioned, size, bitset); |
if (size == 1) { |
return unioned->Get(0); |
@@ -663,7 +621,6 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Intersect( |
} |
size = ExtendUnion(unioned, size, type1, type2, true, region); |
size = ExtendUnion(unioned, size, type2, type1, true, region); |
- size = NormalizeUnion(unioned, size, bitset); |
if (size == 0) { |
return None(region); |