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