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

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

Issue 1088183007: Deprecate ResolvedVisitor.visitClosureSend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Cleanup 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
« no previous file with comments | « pkg/compiler/lib/src/resolved_visitor.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9f8c6819710a6c4d8a6ab808da2e178245211abd..b2b0dd7fbfe8da23ba0a8f63229472ed6b362946 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -3623,25 +3623,53 @@ class SsaBuilder extends NewResolvedVisitor {
}
}
- visitClosureSend(ast.Send node) {
- Selector selector = elements.getSelector(node);
- assert(node.receiver == null);
- Element element = elements[node];
- HInstruction closureTarget;
- if (element == null) {
- visit(node.selector);
- closureTarget = pop();
- } else {
- LocalElement local = element;
- closureTarget = localsHandler.readLocal(local);
- }
- var inputs = <HInstruction>[];
- inputs.add(closureTarget);
- addDynamicSendArgumentsToList(node, inputs);
- Selector closureSelector = new Selector.callClosureFrom(selector);
- pushWithPosition(
- new HInvokeClosure(closureSelector, inputs, backend.dynamicType),
- node);
+ @override
+ visitExpressionInvoke(
+ ast.Send node,
+ ast.Node expression,
+ ast.NodeList arguments,
+ Selector selector,
+ _) {
+ generateCallInvoke(node, visitAndPop(expression));
+ }
+
+ @override
+ visitThisInvoke(
+ ast.Send node,
+ ast.NodeList arguments,
+ CallStructure callStructure,
+ _) {
+ generateCallInvoke(node, localsHandler.readThis());
+ }
+
+ @override
+ visitParameterInvoke(
+ ast.Send node,
+ ParameterElement parameter,
+ ast.NodeList arguments,
+ CallStructure callStructure,
+ _) {
+ generateCallInvoke(node, localsHandler.readLocal(parameter));
+ }
+
+ @override
+ visitLocalVariableInvoke(
+ ast.Send node,
+ LocalVariableElement variable,
+ ast.NodeList arguments,
+ CallStructure callStructure,
+ _) {
+ generateCallInvoke(node, localsHandler.readLocal(variable));
+ }
+
+ @override
+ visitLocalFunctionInvoke(
+ ast.Send node,
+ LocalFunctionElement function,
+ ast.NodeList arguments,
+ CallStructure callStructure,
+ _) {
+ generateCallInvoke(node, localsHandler.readLocal(function));
}
void handleForeignJs(ast.Send node) {
@@ -4773,11 +4801,17 @@ class SsaBuilder extends NewResolvedVisitor {
// reference instead of creating a NoSuchMethodError to avoid pulling it
// in if it is not used (e.g., in a try/catch).
HInstruction target = pop();
+ generateCallInvoke(node, target);
+ }
+
+ /// Generate a '.call' invocation on [target].
+ void generateCallInvoke(ast.Send node, HInstruction target) {
Selector selector = elements.getSelector(node);
List<HInstruction> inputs = <HInstruction>[target];
addDynamicSendArgumentsToList(node, inputs);
Selector closureSelector = new Selector.callClosureFrom(selector);
- push(new HInvokeClosure(closureSelector, inputs, backend.dynamicType));
+ pushWithPosition(
+ new HInvokeClosure(closureSelector, inputs, backend.dynamicType), node);
}
visitGetterSend(ast.Send node) {
« no previous file with comments | « pkg/compiler/lib/src/resolved_visitor.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698