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

Unified Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 1062913003: Extract CallStructure from Selector. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix expentancy in unittest Created 5 years, 8 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/ssa/builder.dart
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index a3c8830caae00180b69b0f959743748fa54553b7..631fa6c1d5f8a9a0ac62cb55e3227ed9daf63f63 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -1244,7 +1244,8 @@ class SsaBuilder extends NewResolvedVisitor {
* For each parameter name in the signature, if the argument name matches
* we use the next provided argument, otherwise we get the default.
*/
- List<String> selectorArgumentNames = selector.getOrderedNamedArguments();
+ List<String> selectorArgumentNames =
+ selector.callStructure.getOrderedNamedArguments();
int namedArgumentIndex = 0;
int firstProvidedNamedArgument = index;
signature.orderedOptionalParameters.forEach((element) {
@@ -1893,13 +1894,12 @@ class SsaBuilder extends NewResolvedVisitor {
}
Element target = constructor.definingConstructor.implementation;
- bool match = Selector.addForwardingElementArgumentsToList(
+ bool match = CallStructure.addForwardingElementArgumentsToList(
constructor,
arguments,
target,
compileArgument,
- handleConstantForOptionalParameter,
- compiler.world);
+ handleConstantForOptionalParameter);
if (!match) {
if (compiler.elementHasCompileTimeError(constructor)) {
return;
@@ -1933,12 +1933,13 @@ class SsaBuilder extends NewResolvedVisitor {
assert(ast.Initializers.isSuperConstructorCall(call) ||
ast.Initializers.isConstructorRedirect(call));
FunctionElement target = elements[call].implementation;
- Selector selector = elements.getSelector(call);
+ CallStructure callStructure =
+ elements.getSelector(call).callStructure;
Link<ast.Node> arguments = call.arguments;
List<HInstruction> compiledArguments;
inlinedFrom(constructor, () {
compiledArguments =
- makeStaticArgumentList(selector, arguments, target);
+ makeStaticArgumentList(callStructure, arguments, target);
});
inlineSuperOrRedirect(target,
compiledArguments,
@@ -1972,12 +1973,12 @@ class SsaBuilder extends NewResolvedVisitor {
compiler.internalError(superClass,
"No default constructor available.");
}
- Selector selector = new Selector.callDefaultConstructor();
List<HInstruction> arguments =
- selector.makeArgumentsList(const Link<ast.Node>(),
- target.implementation,
- null,
- handleConstantForOptionalParameter);
+ CallStructure.NO_ARGS.makeArgumentsList(
+ const Link<ast.Node>(),
+ target.implementation,
+ null,
+ handleConstantForOptionalParameter);
inlineSuperOrRedirect(target,
arguments,
constructors,
@@ -3522,13 +3523,13 @@ class SsaBuilder extends NewResolvedVisitor {
}
void addDynamicSendArgumentsToList(ast.Send node, List<HInstruction> list) {
- Selector selector = elements.getSelector(node);
- if (selector.namedArgumentCount == 0) {
+ CallStructure callStructure = elements.getSelector(node).callStructure;
+ if (callStructure.namedArgumentCount == 0) {
addGenericSendArgumentsToList(node.arguments, list);
} else {
// Visit positional arguments and add them to the list.
Link<ast.Node> arguments = node.arguments;
- int positionalArgumentCount = selector.positionalArgumentCount;
+ int positionalArgumentCount = callStructure.positionalArgumentCount;
for (int i = 0;
i < positionalArgumentCount;
arguments = arguments.tail, i++) {
@@ -3539,7 +3540,7 @@ class SsaBuilder extends NewResolvedVisitor {
// Visit named arguments and add them into a temporary map.
Map<String, HInstruction> instructions =
new Map<String, HInstruction>();
- List<String> namedArguments = selector.namedArguments;
+ List<String> namedArguments = callStructure.namedArguments;
int nameIndex = 0;
for (; !arguments.isEmpty; arguments = arguments.tail) {
visit(arguments.head);
@@ -3549,7 +3550,7 @@ class SsaBuilder extends NewResolvedVisitor {
// Iterate through the named arguments to add them to the list
// of instructions, in an order that can be shared with
// selectors with the same named arguments.
- List<String> orderedNames = selector.getOrderedNamedArguments();
+ List<String> orderedNames = callStructure.getOrderedNamedArguments();
for (String name in orderedNames) {
list.add(instructions[name]);
}
@@ -3562,7 +3563,7 @@ class SsaBuilder extends NewResolvedVisitor {
* Precondition: `this.applies(element, world)`.
* Invariant: [element] must be an implementation element.
*/
- List<HInstruction> makeStaticArgumentList(Selector selector,
+ List<HInstruction> makeStaticArgumentList(CallStructure callStructure,
Link<ast.Node> arguments,
FunctionElement element) {
assert(invariant(element, element.isImplementation));
@@ -3572,10 +3573,11 @@ class SsaBuilder extends NewResolvedVisitor {
return pop();
}
- return selector.makeArgumentsList(arguments,
- element,
- compileArgument,
- handleConstantForOptionalParameter);
+ return callStructure.makeArgumentsList(
+ arguments,
+ element,
+ compileArgument,
+ handleConstantForOptionalParameter);
}
void addGenericSendArgumentsToList(Link<ast.Node> link, List<HInstruction> list) {
@@ -4103,7 +4105,7 @@ class SsaBuilder extends NewResolvedVisitor {
// calling [makeStaticArgumentList].
FunctionElement function = element.implementation;
assert(selector.applies(function, compiler.world));
- inputs = makeStaticArgumentList(selector,
+ inputs = makeStaticArgumentList(selector.callStructure,
node.arguments,
function);
push(buildInvokeSuper(selector, element, inputs));
@@ -4347,7 +4349,7 @@ class SsaBuilder extends NewResolvedVisitor {
}
Element constructor = elements[send];
- Selector selector = elements.getSelector(send);
+ CallStructure callStructure = elements.getSelector(send).callStructure;
ConstructorElement constructorDeclaration = constructor;
ConstructorElement constructorImplementation = constructor.implementation;
constructor = constructorImplementation.effectiveTarget;
@@ -4361,8 +4363,8 @@ class SsaBuilder extends NewResolvedVisitor {
constructor = compiler.symbolValidatedConstructor;
assert(invariant(send, constructor != null,
message: 'Constructor Symbol.validated is missing'));
- selector = compiler.symbolValidatedConstructorSelector;
- assert(invariant(send, selector != null,
+ callStructure = compiler.symbolValidatedConstructorSelector.callStructure;
+ assert(invariant(send, callStructure != null,
message: 'Constructor Symbol.validated is missing'));
}
@@ -4387,11 +4389,11 @@ class SsaBuilder extends NewResolvedVisitor {
}
// TODO(5347): Try to avoid the need for calling [implementation] before
// calling [makeStaticArgumentList].
- if (!selector.applies(constructor.implementation, compiler.world)) {
+ if (!callStructure.signatureApplies(constructor.implementation)) {
generateWrongArgumentCountError(send, constructor, send.arguments);
return;
}
- inputs.addAll(makeStaticArgumentList(selector,
+ inputs.addAll(makeStaticArgumentList(callStructure,
send.arguments,
constructor.implementation));
@@ -4550,7 +4552,7 @@ class SsaBuilder extends NewResolvedVisitor {
}
visitStaticSend(ast.Send node) {
- Selector selector = elements.getSelector(node);
+ CallStructure callStructure = elements.getSelector(node).callStructure;
Element element = elements[node];
if (elements.isAssert(node)) {
element = backend.assertMethod;
@@ -4577,13 +4579,13 @@ class SsaBuilder extends NewResolvedVisitor {
if (element.isFunction) {
// TODO(5347): Try to avoid the need for calling [implementation] before
// calling [makeStaticArgumentList].
- if (!selector.applies(element.implementation, compiler.world)) {
+ if (!callStructure.signatureApplies(element.implementation)) {
generateWrongArgumentCountError(node, element, node.arguments);
return;
}
List<HInstruction> inputs =
- makeStaticArgumentList(selector,
+ makeStaticArgumentList(callStructure,
node.arguments,
element.implementation);
@@ -4598,7 +4600,7 @@ class SsaBuilder extends NewResolvedVisitor {
generateGetter(node, element);
List<HInstruction> inputs = <HInstruction>[pop()];
addDynamicSendArgumentsToList(node, inputs);
- Selector closureSelector = new Selector.callClosureFrom(selector);
+ Selector closureSelector = callStructure.callSelector;
pushWithPosition(
new HInvokeClosure(closureSelector, inputs, backend.dynamicType),
node);
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution.dart ('k') | pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698