Index: pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart |
diff --git a/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart |
index 9369d1def75adfd38a67745050625a8b004259d1..298e97e41fbfd6066b299c717dcdc69f53f58b3d 100644 |
--- a/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart |
+++ b/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart |
@@ -517,8 +517,9 @@ class ConcreteTypeSystem extends TypeSystem<ConcreteType> { |
} |
@override |
- TypeMask newTypedSelector(ConcreteType receiver, TypeMask mask) { |
- return concreteTypeToTypeMask(receiver); |
+ Selector newTypedSelector(ConcreteType receiver, Selector selector) { |
+ return new TypedSelector(concreteTypeToTypeMask(receiver), selector, |
+ compiler.world); |
} |
@override |
@@ -573,14 +574,12 @@ class ConcreteTypeSystem extends TypeSystem<ConcreteType> { |
} |
@override |
- bool selectorNeedsUpdate(ConcreteType type, TypeMask mask) { |
- return concreteTypeToTypeMask(type) != mask; |
+ bool selectorNeedsUpdate(ConcreteType type, Selector selector) { |
+ return concreteTypeToTypeMask(type) != selector.mask; |
} |
@override |
- ConcreteType refineReceiver(Selector selector, |
- TypeMask mask, |
- ConcreteType receiverType, |
+ ConcreteType refineReceiver(Selector selector, ConcreteType receiverType, |
bool isConditional) { |
if (isConditional) { |
throw new UnimplementedError("isConditional in concrete type inferrer"); |
@@ -993,9 +992,7 @@ class DynamicTypeMask implements TypeMask { |
throw new UnsupportedError(""); |
} |
- Element locateSingleElement(Selector selector, |
- TypeMask mask, |
- Compiler compiler) { |
+ Element locateSingleElement(Selector selector, Compiler compiler) { |
throw new UnsupportedError(""); |
} |
@@ -1281,12 +1278,12 @@ class ConcreteTypesInferrer |
* |
* Precondition: [:(typeOfThis != null) && (returnType != null):] |
*/ |
- void augmentInferredSelectorType(Selector selector, |
- TypeMask typeOfThis, |
+ void augmentInferredSelectorType(Selector selector, TypeMask typeOfThis, |
TypeMask returnType) { |
assert(returnType != null); |
assert(typeOfThis != null); |
+ selector = selector.asUntyped; |
Map<TypeMask, TypeMask> currentMap = inferredSelectorTypes.putIfAbsent( |
selector, () => new Map<TypeMask, TypeMask>()); |
TypeMask currentReturnType = currentMap[typeOfThis]; |
@@ -1495,19 +1492,21 @@ class ConcreteTypesInferrer |
* "I don't know". |
*/ |
@override |
- TypeMask getTypeOfSelector(Selector selector, TypeMask mask) { |
- Map<TypeMask, TypeMask> candidates = inferredSelectorTypes[selector]; |
+ TypeMask getTypeOfSelector(Selector selector) { |
+ Map<TypeMask, TypeMask> candidates = |
+ inferredSelectorTypes[selector.asUntyped]; |
if (candidates == null) { |
return null; |
} |
TypeMask result = new TypeMask.nonNullEmpty(); |
- if (mask == null) { |
+ if (selector.mask == null) { |
candidates.forEach((TypeMask receiverType, TypeMask returnType) { |
result = typeMaskUnion(result, returnType); |
}); |
} else { |
candidates.forEach((TypeMask receiverType, TypeMask returnType) { |
- TypeMask intersection = receiverType.intersection(mask, compiler.world); |
+ TypeMask intersection = |
+ receiverType.intersection(selector.mask, compiler.world); |
if (!intersection.isEmpty || intersection.isNullable) { |
result = typeMaskUnion(result, returnType); |
} |
@@ -1919,9 +1918,7 @@ class ConcreteTypesInferrer |
} |
@override |
- void forEachElementMatching(Selector selector, |
- TypeMask mask, |
- bool f(Element element)) { |
+ void forEachElementMatching(Selector selector, bool f(Element element)) { |
getMembersBySelector(selector).forEach(f); |
} |
@@ -1991,7 +1988,6 @@ class ConcreteTypesInferrer |
@override |
ConcreteType registerCalledElement(Spannable node, |
Selector selector, |
- TypeMask mask, |
Element caller, |
Element callee, |
ArgumentsTypes<ConcreteType> arguments, |
@@ -2071,7 +2067,6 @@ class ConcreteTypesInferrer |
@override |
ConcreteType registerCalledSelector(Node node, |
Selector selector, |
- TypeMask mask, |
ConcreteType receiverType, |
Element caller, |
ArgumentsTypes<ConcreteType> arguments, |
@@ -2259,7 +2254,6 @@ class ConcreteTypesInferrer |
@override |
ConcreteType registerCalledClosure(Node node, |
Selector selector, |
- TypeMask mask, |
ConcreteType closure, |
Element caller, |
ArgumentsTypes<ConcreteType> arguments, |