Index: pkg/compiler/lib/src/universe/function_set.dart |
diff --git a/pkg/compiler/lib/src/universe/function_set.dart b/pkg/compiler/lib/src/universe/function_set.dart |
index 9f13c1ea2293b8a2eecbd0fddca6ebbb9be8596b..27273341577b5f7eba0027acde786c9b6b642ef8 100644 |
--- a/pkg/compiler/lib/src/universe/function_set.dart |
+++ b/pkg/compiler/lib/src/universe/function_set.dart |
@@ -19,6 +19,8 @@ import '../world.dart' show |
import 'selector.dart' show |
Selector; |
+import 'universe.dart' show |
+ ReceiverConstraint; |
// TODO(kasperl): This actually holds getters and setters just fine |
// too and stricly they aren't functions. Maybe this needs a better |
@@ -64,36 +66,37 @@ class FunctionSet { |
/// Returns an object that allows iterating over all the functions |
/// that may be invoked with the given [selector]. |
- Iterable<Element> filter(Selector selector, TypeMask mask) { |
- return query(selector, mask).functions; |
+ Iterable<Element> filter(Selector selector, ReceiverConstraint constraint) { |
+ return query(selector, constraint).functions; |
} |
/// Returns the mask for the potential receivers of a dynamic call to |
- /// [selector] on [mask]. |
+ /// [selector] on [constraint]. |
/// |
- /// This will reduce the set of classes in [mask] to a [TypeMask] of the set |
- /// of classes that actually implement the selected member or implement the |
- /// handling 'noSuchMethod' where the selected member is unimplemented. |
- TypeMask receiverType(Selector selector, TypeMask mask) { |
- return query(selector, mask).computeMask(classWorld); |
+ /// This will narrow the constraints of [constraint] to a [TypeMask] of the |
+ /// set of classes that actually implement the selected member or implement |
+ /// the handling 'noSuchMethod' where the selected member is unimplemented. |
+ TypeMask receiverType(Selector selector, ReceiverConstraint constraint) { |
+ return query(selector, constraint).computeMask(classWorld); |
} |
SelectorMask _createSelectorMask( |
- Selector selector, TypeMask mask, ClassWorld classWorld) { |
- return mask != null |
- ? new SelectorMask(selector, mask) |
+ Selector selector, ReceiverConstraint constraint, ClassWorld classWorld) { |
+ return constraint != null |
+ ? new SelectorMask(selector, constraint) |
: new SelectorMask(selector, |
new TypeMask.subclass(classWorld.objectClass, classWorld)); |
} |
/// Returns the set of functions that can be the target of a call to |
- /// [selector] on a receiver of type [mask] including 'noSuchMethod' methods |
- /// where applicable. |
- FunctionSetQuery query(Selector selector, TypeMask mask) { |
+ /// [selector] on a receiver constrained by [constraint] including |
+ /// 'noSuchMethod' methods where applicable. |
+ FunctionSetQuery query(Selector selector, ReceiverConstraint constraint) { |
String name = selector.name; |
- SelectorMask selectorMask = _createSelectorMask(selector, mask, classWorld); |
+ SelectorMask selectorMask = |
+ _createSelectorMask(selector, constraint, classWorld); |
SelectorMask noSuchMethodMask = |
- new SelectorMask(Selectors.noSuchMethod_, selectorMask.mask); |
+ new SelectorMask(Selectors.noSuchMethod_, selectorMask.constraint); |
FunctionSetNode node = nodes[name]; |
FunctionSetNode noSuchMethods = nodes[Identifiers.noSuchMethod_]; |
if (node != null) { |
@@ -115,38 +118,38 @@ class FunctionSet { |
} |
} |
-/// A selector/mask pair representing the dynamic invocation of [selector] on |
-/// a receiver of type [mask]. |
+/// A selector/constraint pair representing the dynamic invocation of [selector] |
+/// on a receiver constrained by [constraint]. |
class SelectorMask { |
final Selector selector; |
- final TypeMask mask; |
+ final ReceiverConstraint constraint; |
final int hashCode; |
- SelectorMask(Selector selector, TypeMask mask) |
+ SelectorMask(Selector selector, ReceiverConstraint constraint) |
: this.selector = selector, |
- this.mask = mask, |
+ this.constraint = constraint, |
this.hashCode = |
- Hashing.mixHashCodeBits(selector.hashCode, mask.hashCode) { |
- assert(mask != null); |
+ Hashing.mixHashCodeBits(selector.hashCode, constraint.hashCode) { |
+ assert(constraint != null); |
} |
String get name => selector.name; |
bool applies(Element element, ClassWorld classWorld) { |
if (!selector.appliesUnnamed(element, classWorld)) return false; |
- return mask.canHit(element, selector, classWorld); |
+ return constraint.canHit(element, selector, classWorld); |
} |
bool needsNoSuchMethodHandling(ClassWorld classWorld) { |
- return mask.needsNoSuchMethodHandling(selector, classWorld); |
+ return constraint.needsNoSuchMethodHandling(selector, classWorld); |
} |
bool operator ==(other) { |
if (identical(this, other)) return true; |
- return selector == other.selector && mask == other.mask; |
+ return selector == other.selector && constraint == other.constraint; |
} |
- String toString() => '($selector,$mask)'; |
+ String toString() => '($selector,$constraint)'; |
} |
/// A node in the [FunctionSet] caching all [FunctionSetQuery] object for |