Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Unified Diff: src/types.cc

Issue 444503005: Remove non-trivial subtyping between bitset and non-bitset types. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/cctest/test-types.cc » ('j') | test/cctest/test-types.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/types.cc
diff --git a/src/types.cc b/src/types.cc
index c4e32f7823e6a15ac684a163c864b5de929bcc25..0925fd5da232ff67e96dbbeb136270df1a96aaf4 100644
--- a/src/types.cc
+++ b/src/types.cc
@@ -26,21 +26,7 @@ int TypeImpl<Config>::BitsetType::Glb(TypeImpl* type) {
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());
} else {
- UNREACHABLE();
return kNone;
}
}
@@ -260,10 +246,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 +537,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 +575,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 +624,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);
« no previous file with comments | « no previous file | test/cctest/test-types.cc » ('j') | test/cctest/test-types.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698