Index: pkg/compiler/lib/src/resolution/members.dart |
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart |
index d89474404cc791185bef9ad3c99fcc2363bef8db..db6f1dd5af0b4f0dcc694bd1fb16e6d6b68ce016 100644 |
--- a/pkg/compiler/lib/src/resolution/members.dart |
+++ b/pkg/compiler/lib/src/resolution/members.dart |
@@ -42,7 +42,6 @@ import '../util/util.dart' show |
import '../universe/universe.dart' show |
CallStructure, |
Selector, |
- SelectorKind, |
UniverseSelector; |
import 'access_semantics.dart'; |
@@ -666,7 +665,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
if (op == null) { |
// Unsupported operator. An error has been reported during parsing. |
return new Selector.call( |
- new Name(source, library), node.argumentsNode.slowLength(), []); |
+ new Name(source, library), |
+ new CallStructure.unnamed(node.argumentsNode.slowLength())); |
} |
return node.arguments.isEmpty |
? new Selector.unaryOperator(op) |
@@ -705,7 +705,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
// If we're invoking a closure, we do not have an identifier. |
return (identifier == null) |
? new Selector.callClosure(arity, named) |
- : new Selector.call(new Name(identifier.source, library), arity, named); |
+ : new Selector.call(new Name(identifier.source, library), |
+ new CallStructure(arity, named)); |
} |
Selector resolveSelector(Send node, Element element) { |
@@ -1209,7 +1210,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
} |
} else { |
ResolutionResult expressionResult = visitExpression(expression); |
- semantics = const DynamicAccess.dynamicProperty(); |
+ semantics = const DynamicAccess.expression(); |
registry.registerDynamicInvocation(new UniverseSelector(selector, null)); |
if (expressionResult.isConstant) { |
@@ -1254,8 +1255,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
Node expression = node.receiver; |
ResolutionResult result = visitExpression(expression); |
- registry.registerSendStructure(node, |
- new NotStructure(const DynamicAccess.dynamicProperty())); |
+ registry.registerSendStructure(node, const NotStructure()); |
if (result.isConstant) { |
ConstantExpression expressionConstant = result.constant; |
@@ -1385,7 +1385,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
ResolutionResult leftResult = visitExpression(left); |
ResolutionResult rightResult = visitExpression(right); |
registry.registerDynamicInvocation(new UniverseSelector(selector, null)); |
- semantics = const DynamicAccess.dynamicProperty(); |
+ semantics = const DynamicAccess.expression(); |
if (leftResult.isConstant && rightResult.isConstant) { |
bool isValidConstant; |
@@ -1554,7 +1554,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
/// Handle access of a property of [name] on `this`, like `this.name` and |
/// `this.name()`, or `name` and `name()` in instance context. |
ResolutionResult handleThisPropertyAccess(Send node, Name name) { |
- AccessSemantics semantics = const DynamicAccess.thisProperty(); |
+ AccessSemantics semantics = new DynamicAccess.thisProperty(name); |
return handleDynamicAccessSemantics(node, name, semantics); |
} |
@@ -1562,7 +1562,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
/// `this.name++`, or `name = b` and `name++` in instance context. |
ResolutionResult handleThisPropertyUpdate( |
SendSet node, Name name, Element element) { |
- AccessSemantics semantics = const DynamicAccess.thisProperty(); |
+ AccessSemantics semantics = new DynamicAccess.thisProperty(name); |
return handleDynamicUpdateSemantics(node, name, element, semantics); |
} |
@@ -1598,13 +1598,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
ResolutionResult handleSuperPropertyAccess(Send node, Name name) { |
Element target; |
Selector selector; |
- CallStructure callStructure = CallStructure.NO_ARGS; |
+ CallStructure callStructure; |
if (node.isCall) { |
- callStructure = |
- resolveArguments(node.argumentsNode).callStructure; |
- selector = new Selector(SelectorKind.CALL, name, callStructure); |
+ callStructure = resolveArguments(node.argumentsNode).callStructure; |
+ selector = new Selector.call(name, callStructure); |
} else { |
- selector = new Selector(SelectorKind.GETTER, name, callStructure); |
+ selector = new Selector.getter(name); |
} |
AccessSemantics semantics = checkSuperAccess(node); |
if (semantics == null) { |
@@ -1674,8 +1673,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
internalError(node, "Unexpected super property access $semantics."); |
break; |
} |
- registry.registerSendStructure(node, |
- new GetStructure(semantics, selector)); |
+ registry.registerSendStructure(node, new GetStructure(semantics)); |
} |
target = semantics.element; |
@@ -1969,9 +1967,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
new InvokeStructure(semantics, selector)); |
} else { |
// TODO(johnniwinther): Avoid the need for a [Selector] here. |
floitsch
2015/08/24 14:15:13
remove todo.
|
- registry.registerSendStructure(node, |
- new GetStructure(semantics, |
- new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS))); |
+ registry.registerSendStructure(node, new GetStructure(semantics)); |
} |
return const NoneResult(); |
} |
@@ -2050,9 +2046,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
analyzeConstantDeferred(node, enforceConst: false); |
// TODO(johnniwinther): Avoid the need for a [Selector] here. |
floitsch
2015/08/24 14:15:13
ditto.
|
- registry.registerSendStructure(node, |
- new GetStructure(semantics, |
- new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS))); |
+ registry.registerSendStructure(node, new GetStructure(semantics)); |
return new ConstantResult(node, semantics.constant); |
} |
} |
@@ -2342,17 +2336,16 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
if (node.isCall) { |
CallStructure callStructure = |
resolveArguments(node.argumentsNode).callStructure; |
- selector = new Selector(SelectorKind.CALL, name, callStructure); |
+ selector = new Selector.call(name, callStructure); |
registry.registerDynamicInvocation( |
new UniverseSelector(selector, null)); |
sendStructure = new InvokeStructure(semantics, selector); |
} else { |
assert(invariant(node, node.isPropertyAccess)); |
- selector = new Selector( |
- SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
+ selector = new Selector.getter(name); |
registry.registerDynamicGetter( |
new UniverseSelector(selector, null)); |
- sendStructure = new GetStructure(semantics, selector); |
+ sendStructure = new GetStructure(semantics); |
} |
registry.registerSendStructure(node, sendStructure); |
// TODO(23998): Remove this when all information goes through |
@@ -2364,10 +2357,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
/// Handle dynamic update of [semantics]. |
ResolutionResult handleDynamicUpdateSemantics( |
SendSet node, Name name, Element element, AccessSemantics semantics) { |
- Selector getterSelector = |
- new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
- Selector setterSelector = |
- new Selector(SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG); |
+ Selector getterSelector = new Selector.getter(name); |
+ Selector setterSelector = new Selector.setter(name.setter); |
registry.registerDynamicSetter( |
new UniverseSelector(setterSelector, null)); |
if (node.isComplex) { |
@@ -2430,13 +2421,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
return handlePrefixSend(node, name, result); |
} else if (node.isConditional) { |
return handleDynamicAccessSemantics( |
- node, name, const DynamicAccess.ifNotNullProperty()); |
+ node, name, new DynamicAccess.ifNotNullProperty(name)); |
} else { |
// Handle dynamic property access, like `a.b` or `a.b()` where `a` is not |
// a prefix or class. |
// TODO(johnniwinther): Use the `element` of [result]. |
return handleDynamicAccessSemantics( |
- node, name, const DynamicAccess.dynamicProperty()); |
+ node, name, new DynamicAccess.dynamicProperty(name)); |
} |
} |
@@ -2463,13 +2454,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
return handlePrefixSendSet(node, name, result); |
} else if (node.isConditional) { |
return handleDynamicUpdateSemantics( |
- node, name, null, const DynamicAccess.ifNotNullProperty()); |
+ node, name, null, new DynamicAccess.ifNotNullProperty(name)); |
} else { |
// Handle dynamic property access, like `a.b = c`, `a.b++` or `a.b += c` |
// where `a` is not a prefix or class. |
// TODO(johnniwinther): Use the `element` of [result]. |
return handleDynamicUpdateSemantics( |
- node, name, null, const DynamicAccess.dynamicProperty()); |
+ node, name, null, new DynamicAccess.dynamicProperty(name)); |
} |
} |
@@ -2490,17 +2481,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
if (node.isCall) { |
CallStructure callStructure = |
resolveArguments(node.argumentsNode).callStructure; |
- selector = new Selector(SelectorKind.CALL, name, callStructure); |
- registry.registerDynamicInvocation( |
- new UniverseSelector(selector, null)); |
+ selector = new Selector.call(name, callStructure); |
+ registry.registerDynamicInvocation(new UniverseSelector(selector, null)); |
sendStructure = new InvokeStructure(semantics, selector); |
} else { |
assert(invariant(node, node.isPropertyAccess)); |
- selector = new Selector( |
- SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
- registry.registerDynamicGetter( |
- new UniverseSelector(selector, null)); |
- sendStructure = new GetStructure(semantics, selector); |
+ selector = new Selector.getter(name); |
+ registry.registerDynamicGetter(new UniverseSelector(selector, null)); |
+ sendStructure = new GetStructure(semantics); |
} |
// TODO(23998): Remove this when all information goes through |
// the [SendStructure]. |
@@ -2567,7 +2555,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
if (node.isCall) { |
CallStructure callStructure = |
resolveArguments(node.argumentsNode).callStructure; |
- selector = new Selector(SelectorKind.CALL, name, callStructure); |
+ selector = new Selector.call(name, callStructure); |
bool isIncompatibleInvoke = false; |
switch (semantics.kind) { |
case AccessKind.LOCAL_FUNCTION: |
@@ -2639,9 +2627,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
"Unexpected local access $semantics."); |
break; |
} |
- selector = new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
- registry.registerSendStructure(node, |
- new GetStructure(semantics, selector)); |
+ selector = new Selector.getter(name); |
+ registry.registerSendStructure(node, new GetStructure(semantics)); |
} |
// TODO(23998): Remove these when all information goes through |
@@ -2739,7 +2726,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
ArgumentsResult argumentsResult = |
resolveArguments(node.argumentsNode); |
CallStructure callStructure = argumentsResult.callStructure; |
- selector = new Selector(SelectorKind.CALL, name, callStructure); |
+ selector = new Selector.call(name, callStructure); |
bool isIncompatibleInvoke = false; |
switch (semantics.kind) { |
@@ -2793,7 +2780,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
? new IncompatibleInvokeStructure(semantics, selector) |
: new InvokeStructure(semantics, selector)); |
} else { |
- selector = new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
+ selector = new Selector.getter(name); |
switch (semantics.kind) { |
case AccessKind.STATIC_METHOD: |
case AccessKind.TOPLEVEL_METHOD: |
@@ -2823,8 +2810,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
"Unexpected statically resolved access $semantics."); |
break; |
} |
- registry.registerSendStructure(node, |
- new GetStructure(semantics, selector)); |
+ registry.registerSendStructure(node, new GetStructure(semantics)); |
if (member.isConst) { |
FieldElement field = member; |
result = new ConstantResult( |
@@ -3148,10 +3134,10 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
Node index = node.arguments.head; |
visitExpression(receiver); |
visitExpression(index); |
+ AccessSemantics semantics = const DynamicAccess.expression(); |
if (node.isPrefix || node.isPostfix) { |
// `a[b]++` or `++a[b]`. |
IncDecOperator operator = IncDecOperator.parse(operatorText); |
- AccessSemantics semantics = const DynamicAccess.dynamicProperty(); |
Selector getterSelector = new Selector.index(); |
Selector setterSelector = new Selector.indexSet(); |
Selector operatorSelector = |
@@ -3171,10 +3157,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
new UniverseSelector(operatorSelector, null)); |
SendStructure sendStructure = node.isPrefix |
- ? new IndexPrefixStructure( |
- semantics, operator, getterSelector, setterSelector) |
- : new IndexPostfixStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ ? new IndexPrefixStructure(semantics, operator) |
+ : new IndexPostfixStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} else { |
@@ -3184,7 +3168,6 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
AssignmentOperator operator = AssignmentOperator.parse(operatorText); |
if (operator.kind == AssignmentOperatorKind.ASSIGN) { |
// `a[b] = c`. |
- AccessSemantics semantics = const DynamicAccess.dynamicProperty(); |
Selector setterSelector = new Selector.indexSet(); |
// TODO(23998): Remove this when selectors are only accessed |
@@ -3193,13 +3176,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
registry.registerDynamicInvocation( |
new UniverseSelector(setterSelector, null)); |
- SendStructure sendStructure = |
- new IndexSetStructure(semantics, setterSelector); |
+ SendStructure sendStructure = new IndexSetStructure(semantics); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} else { |
// `a[b] += c`. |
- AccessSemantics semantics = const DynamicAccess.dynamicProperty(); |
Selector getterSelector = new Selector.index(); |
Selector setterSelector = new Selector.indexSet(); |
Selector operatorSelector = |
@@ -3218,8 +3199,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
registry.registerDynamicInvocation( |
new UniverseSelector(operatorSelector, null)); |
- SendStructure sendStructure = new CompoundIndexSetStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ SendStructure sendStructure = |
+ new CompoundIndexSetStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} |
@@ -3264,10 +3245,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
new UniverseSelector(operatorSelector, null)); |
SendStructure sendStructure = node.isPrefix |
- ? new IndexPrefixStructure( |
- semantics, operator, getterSelector, setterSelector) |
- : new IndexPostfixStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ ? new IndexPrefixStructure(semantics, operator) |
+ : new IndexPostfixStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} else { |
@@ -3292,8 +3271,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
registry.setSelector(node, setterSelector); |
registry.registerStaticInvocation(semantics.setter); |
- SendStructure sendStructure = |
- new IndexSetStructure(semantics, setterSelector); |
+ SendStructure sendStructure = new IndexSetStructure(semantics); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} else { |
@@ -3324,8 +3302,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
registry.registerDynamicInvocation( |
new UniverseSelector(operatorSelector, null)); |
- SendStructure sendStructure = new CompoundIndexSetStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ SendStructure sendStructure = |
+ new CompoundIndexSetStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
return const NoneResult(); |
} |
@@ -3340,10 +3318,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
String text = selector.source; |
Name name = new Name(text, enclosingElement.library); |
String operatorText = node.assignmentOperator.source; |
- Selector getterSelector = new Selector( |
- SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
- Selector setterSelector = new Selector( |
- SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG); |
+ Selector getterSelector = new Selector.getter(name); |
+ Selector setterSelector = new Selector.setter(name); |
AccessSemantics semantics = checkSuperAccess(node); |
if (node.isPrefix || node.isPostfix) { |
// `super.a++` or `++super.a`. |
@@ -3412,10 +3388,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
AccessSemantics semantics) { |
SendStructure sendStructure; |
String operatorText = node.assignmentOperator.source; |
- Selector getterSelector = |
- new Selector(SelectorKind.GETTER, name, CallStructure.NO_ARGS); |
- Selector setterSelector = |
- new Selector(SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG); |
+ Selector getterSelector = new Selector.getter(name); |
+ Selector setterSelector = new Selector.setter(name); |
if (node.isPrefix || node.isPostfix) { |
// `e++` or `++e`. |
IncDecOperator operator = IncDecOperator.parse(operatorText); |
@@ -3437,10 +3411,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
new UniverseSelector(operatorSelector, null)); |
SendStructure sendStructure = node.isPrefix |
- ? new PrefixStructure( |
- semantics, operator, getterSelector, setterSelector) |
- : new PostfixStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ ? new PrefixStructure(semantics, operator) |
+ : new PostfixStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
} else { |
Node rhs = node.arguments.head; |
@@ -3458,8 +3430,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
// through the send structure. |
registry.setSelector(node, setterSelector); |
- SendStructure sendStructure = |
- new SetStructure(semantics, setterSelector); |
+ SendStructure sendStructure = new SetStructure(semantics); |
registry.registerSendStructure(node, sendStructure); |
} else { |
// `e1 += e2`. |
@@ -3480,8 +3451,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
registry.registerDynamicInvocation( |
new UniverseSelector(operatorSelector, null)); |
- SendStructure sendStructure = new CompoundStructure( |
- semantics, operator, getterSelector, setterSelector); |
+ SendStructure sendStructure = |
+ new CompoundStructure(semantics, operator); |
registry.registerSendStructure(node, sendStructure); |
} |
} |