Index: pkg/compiler/lib/src/world.dart |
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart |
index 2b4697fcb5a58c27790ffc76e2bca013b4ec7489..99b449334a0f99394ed7e745734701baca2aa017 100644 |
--- a/pkg/compiler/lib/src/world.dart |
+++ b/pkg/compiler/lib/src/world.dart |
@@ -111,6 +111,9 @@ class World implements ClassWorld { |
ClassElement get doubleClass => compiler.doubleClass; |
ClassElement get stringClass => compiler.stringClass; |
+ Map<Selector, Map<ti.TypeMask, TypedSelector>> canonicalizedValues = |
+ new Map<Selector, Map<ti.TypeMask, TypedSelector>>(); |
+ |
bool checkInvariants(ClassElement cls, {bool mustBeInstantiated: true}) { |
return |
invariant(cls, cls.isDeclaration, |
@@ -402,8 +405,8 @@ class World implements ClassWorld { |
users.add(mixinApplication); |
} |
- bool hasAnyUserDefinedGetter(Selector selector, ti.TypeMask mask) { |
- return allFunctions.filter(selector, mask).any((each) => each.isGetter); |
+ bool hasAnyUserDefinedGetter(Selector selector) { |
+ return allFunctions.filter(selector).any((each) => each.isGetter); |
} |
void registerUsedElement(Element element) { |
@@ -412,26 +415,16 @@ class World implements ClassWorld { |
} |
} |
- VariableElement locateSingleField(Selector selector, ti.TypeMask mask) { |
- Element result = locateSingleElement(selector, mask); |
+ VariableElement locateSingleField(Selector selector) { |
+ Element result = locateSingleElement(selector); |
return (result != null && result.isField) ? result : null; |
} |
- Element locateSingleElement(Selector selector, ti.TypeMask mask) { |
- mask = mask == null |
+ Element locateSingleElement(Selector selector) { |
+ ti.TypeMask mask = selector.mask == null |
? compiler.typesTask.dynamicType |
- : mask; |
- return mask.locateSingleElement(selector, mask, compiler); |
- } |
- |
- ti.TypeMask extendMaskIfReachesAll(Selector selector, ti.TypeMask mask) { |
- bool canReachAll = true; |
- if (mask != null) { |
- canReachAll = |
- compiler.enabledInvokeOn && |
- mask.needsNoSuchMethodHandling(selector, this); |
- } |
- return canReachAll ? compiler.typesTask.dynamicType : mask; |
+ : selector.mask; |
+ return mask.locateSingleElement(selector, compiler); |
} |
void addFunctionCalledInLoop(Element element) { |
@@ -482,11 +475,11 @@ class World implements ClassWorld { |
sideEffectsFreeElements.add(element); |
} |
- SideEffects getSideEffectsOfSelector(Selector selector, ti.TypeMask mask) { |
+ SideEffects getSideEffectsOfSelector(Selector selector) { |
// We're not tracking side effects of closures. |
if (selector.isClosureCall) return new SideEffects(); |
SideEffects sideEffects = new SideEffects.empty(); |
- for (Element e in allFunctions.filter(selector, mask)) { |
+ for (Element e in allFunctions.filter(selector)) { |
if (e.isField) { |
if (selector.isGetter) { |
if (!fieldNeverChanges(e)) { |