Index: src/types.cc |
diff --git a/src/types.cc b/src/types.cc |
index d9c12d209e5aea4ce5bfbc3cbdca8b20489300d9..4526b6fe4470866c27a5fb6c3a208c301f3b4c7c 100644 |
--- a/src/types.cc |
+++ b/src/types.cc |
@@ -306,9 +306,6 @@ bool TypeImpl<Config>::SlowIs(TypeImpl* that) { |
template<class Config> |
bool TypeImpl<Config>::NowIs(TypeImpl* that) { |
- // TODO(rossberg): this is incorrect for |
- // Union(Constant(V), T)->NowIs(Class(M)) |
- // but fuzzing does not cover that! |
DisallowHeapAllocation no_allocation; |
if (this->IsConstant()) { |
i::Object* object = *this->AsConstant(); |
@@ -438,12 +435,12 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Union( |
size += (type2->IsUnion() ? Config::struct_length(type2->AsUnion()) : 1); |
} |
int bitset = type1->GlbBitset() | type2->GlbBitset(); |
- if (bitset != kNone) ++size; |
+ if (IsInhabited(bitset)) ++size; |
ASSERT(size >= 1); |
StructHandle unioned = Config::struct_create(kUnionTag, size, region); |
size = 0; |
- if (bitset != kNone) { |
+ if (IsInhabited(bitset)) { |
Config::struct_set(unioned, size++, Config::from_bitset(bitset, region)); |
} |
size = ExtendUnion(unioned, type1, size); |
@@ -514,12 +511,12 @@ typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Intersect( |
type2->IsUnion() ? Config::struct_length(type2->AsUnion()) : 1); |
} |
int bitset = type1->GlbBitset() & type2->GlbBitset(); |
- if (bitset != kNone) ++size; |
+ if (IsInhabited(bitset)) ++size; |
ASSERT(size >= 1); |
StructHandle unioned = Config::struct_create(kUnionTag, size, region); |
size = 0; |
- if (bitset != kNone) { |
+ if (IsInhabited(bitset)) { |
Config::struct_set(unioned, size++, Config::from_bitset(bitset, region)); |
} |
size = ExtendIntersection(unioned, type1, type2, size); |