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

Unified Diff: sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart

Issue 24952003: Change TypeMask.base to be a ClassElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Moar declaration. Created 7 years, 3 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
Index: sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
diff --git a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
index 6c40e56185605b626cbd6c0df1755e72d5d251f1..269b1b5231d89d1669ab93324d639260cbcbbed3 100644
--- a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
@@ -37,8 +37,7 @@ class UnionTypeMask implements TypeMask {
continue;
} else {
FlatTypeMask flatMask = mask;
- assert(flatMask.base == null
- || flatMask.base.element != compiler.dynamicClass);
+ assert(flatMask.base == null || flatMask.base != compiler.dynamicClass);
int inListIndex = -1;
bool covered = false;
@@ -87,13 +86,13 @@ class UnionTypeMask implements TypeMask {
bool isNullable = masks.any((e) => e.isNullable);
// Compute the common supertypes of the two types.
- ClassElement firstElement = masks[0].base.element;
- ClassElement secondElement = masks[1].base.element;
+ ClassElement firstElement = masks[0].base;
+ ClassElement secondElement = masks[1].base;
Iterable<ClassElement> candidates =
compiler.world.commonSupertypesOf(firstElement, secondElement);
bool unseenType = false;
for (int i = 2; i < masks.length; i++) {
- ClassElement element = masks[i].base.element;
+ ClassElement element = masks[i].base;
Set<ClassElement> supertypes = compiler.world.supertypesOf(element);
if (supertypes == null) {
unseenType = true;
@@ -105,7 +104,7 @@ class UnionTypeMask implements TypeMask {
if (candidates.isEmpty || unseenType) {
// TODO(kasperl): Get rid of this check. It can only happen when
// at least one of the two base types is 'unseen'.
- return new TypeMask(compiler.objectClass.rawType,
+ return new TypeMask(compiler.objectClass,
FlatTypeMask.SUBCLASS,
isNullable);
}
@@ -120,7 +119,7 @@ class UnionTypeMask implements TypeMask {
int size;
int kind;
if (subclasses != null
- && masks.every((t) => subclasses.contains(t.base.element))) {
+ && masks.every((t) => subclasses.contains(t.base))) {
// If both [this] and [other] are subclasses of the supertype,
// then we prefer to construct a subclass type mask because it
// will always be at least as small as the corresponding
@@ -140,9 +139,7 @@ class UnionTypeMask implements TypeMask {
}
}
if (bestElement == compiler.objectClass) bestKind = FlatTypeMask.SUBCLASS;
- return new TypeMask(bestElement.computeType(compiler),
- bestKind,
- isNullable);
+ return new TypeMask(bestElement, bestKind, isNullable);
}
TypeMask union(var other, Compiler compiler) {
@@ -217,7 +214,7 @@ class UnionTypeMask implements TypeMask {
return disjointMasks.every((mask) => mask.satisfies(cls, compiler));
}
- bool contains(DartType type, Compiler compiler) {
+ bool contains(ClassElement type, Compiler compiler) {
return disjointMasks.any((e) => e.contains(type, compiler));
}

Powered by Google App Engine
This is Rietveld 408576698