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

Unified Diff: pkg/compiler/lib/src/resolution/members.dart

Issue 1314573002: Use Name instead of Selector in SemanticSendVisitor (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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: 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);
}
}

Powered by Google App Engine
This is Rietveld 408576698