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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 1112843004: Refactor to make visitDynamicSend deprecated. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/compiler/lib/src/resolved_visitor.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of ssa; 5 part of ssa;
6 6
7 class SsaFunctionCompiler implements FunctionCompiler { 7 class SsaFunctionCompiler implements FunctionCompiler {
8 SsaCodeGeneratorTask generator; 8 SsaCodeGeneratorTask generator;
9 SsaBuilderTask builder; 9 SsaBuilderTask builder;
10 SsaOptimizerTask optimizer; 10 SsaOptimizerTask optimizer;
(...skipping 3140 matching lines...) Expand 10 before | Expand all | Expand 10 after
3151 @override 3151 @override
3152 void visitBinary(ast.Send node, 3152 void visitBinary(ast.Send node,
3153 ast.Node left, 3153 ast.Node left,
3154 BinaryOperator operator, 3154 BinaryOperator operator,
3155 ast.Node right, _) { 3155 ast.Node right, _) {
3156 handleBinary(node, left, right); 3156 handleBinary(node, left, right);
3157 } 3157 }
3158 3158
3159 @override 3159 @override
3160 void visitIndex(ast.Send node, ast.Node receiver, ast.Node index, _) { 3160 void visitIndex(ast.Send node, ast.Node receiver, ast.Node index, _) {
3161 // TODO(johnniwinther): Add a new helper to join the paths used by 3161 generateDynamicSend(node);
3162 // [visitIndex], [visitDynamicSend] and [handleSendSet].
3163 visitDynamicSend(node);
3164 } 3162 }
3165 3163
3166 @override 3164 @override
3167 void visitEquals(ast.Send node, ast.Node left, ast.Node right, _) { 3165 void visitEquals(ast.Send node, ast.Node left, ast.Node right, _) {
3168 handleBinary(node, left, right); 3166 handleBinary(node, left, right);
3169 } 3167 }
3170 3168
3171 @override 3169 @override
3172 void visitNotEquals(ast.Send node, ast.Node left, ast.Node right, _) { 3170 void visitNotEquals(ast.Send node, ast.Node left, ast.Node right, _) {
3173 handleBinary(node, left, right); 3171 handleBinary(node, left, right);
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
3678 handleConstantForOptionalParameter); 3676 handleConstantForOptionalParameter);
3679 } 3677 }
3680 3678
3681 void addGenericSendArgumentsToList(Link<ast.Node> link, List<HInstruction> lis t) { 3679 void addGenericSendArgumentsToList(Link<ast.Node> link, List<HInstruction> lis t) {
3682 for (; !link.isEmpty; link = link.tail) { 3680 for (; !link.isEmpty; link = link.tail) {
3683 visit(link.head); 3681 visit(link.head);
3684 list.add(pop()); 3682 list.add(pop());
3685 } 3683 }
3686 } 3684 }
3687 3685
3688 visitDynamicSend(ast.Send node) { 3686 /// Generate a dynamic method, getter or setter invocation.
3687 void generateDynamicSend(ast.Send node) {
3689 Selector selector = elements.getSelector(node); 3688 Selector selector = elements.getSelector(node);
3690 3689
3691 List<HInstruction> inputs = <HInstruction>[]; 3690 List<HInstruction> inputs = <HInstruction>[];
3692 HInstruction receiver = generateInstanceSendReceiver(node); 3691 HInstruction receiver = generateInstanceSendReceiver(node);
3693 inputs.add(receiver); 3692 inputs.add(receiver);
3694 addDynamicSendArgumentsToList(node, inputs); 3693 addDynamicSendArgumentsToList(node, inputs);
3695 3694
3696 pushInvokeDynamic(node, selector, inputs); 3695 pushInvokeDynamic(node, selector, inputs);
3697 if (selector.isSetter || selector.isIndexSet) { 3696 if (selector.isSetter || selector.isIndexSet) {
3698 pop(); 3697 pop();
3699 stack.add(inputs.last); 3698 stack.add(inputs.last);
3700 } 3699 }
3701 } 3700 }
3702 3701
3703 @override 3702 @override
3703 visitDynamicPropertyInvoke(
3704 ast.Send node,
3705 ast.Node receiver,
3706 ast.NodeList arguments,
3707 Selector selector,
3708 _) {
3709 generateDynamicSend(node);
3710 }
3711
3712 @override
3713 visitThisPropertyInvoke(
3714 ast.Send node,
3715 ast.NodeList arguments,
3716 Selector selector,
3717 _) {
3718 generateDynamicSend(node);
3719 }
3720
3721 @override
3704 visitExpressionInvoke( 3722 visitExpressionInvoke(
3705 ast.Send node, 3723 ast.Send node,
3706 ast.Node expression, 3724 ast.Node expression,
3707 ast.NodeList arguments, 3725 ast.NodeList arguments,
3708 Selector selector, 3726 Selector selector,
3709 _) { 3727 _) {
3710 generateCallInvoke(node, visitAndPop(expression)); 3728 generateCallInvoke(node, visitAndPop(expression));
3711 } 3729 }
3712 3730
3713 @override 3731 @override
(...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after
5481 || !setterSelector.applies(element, compiler.world)) { 5499 || !setterSelector.applies(element, compiler.world)) {
5482 generateSuperNoSuchMethodSend( 5500 generateSuperNoSuchMethodSend(
5483 node, setterSelector, setterInputs); 5501 node, setterSelector, setterInputs);
5484 pop(); 5502 pop();
5485 } else { 5503 } else {
5486 add(buildInvokeSuper(setterSelector, element, setterInputs)); 5504 add(buildInvokeSuper(setterSelector, element, setterInputs));
5487 } 5505 }
5488 stack.add(result); 5506 stack.add(result);
5489 } else if (node.isIndex) { 5507 } else if (node.isIndex) {
5490 if ("=" == op.source) { 5508 if ("=" == op.source) {
5491 visitDynamicSend(node); 5509 generateDynamicSend(node);
5492 } else { 5510 } else {
5493 visit(node.receiver); 5511 visit(node.receiver);
5494 HInstruction receiver = pop(); 5512 HInstruction receiver = pop();
5495 Link<ast.Node> arguments = node.arguments; 5513 Link<ast.Node> arguments = node.arguments;
5496 HInstruction index; 5514 HInstruction index;
5497 if (node.isIndex) { 5515 if (node.isIndex) {
5498 visit(arguments.head); 5516 visit(arguments.head);
5499 arguments = arguments.tail; 5517 arguments = arguments.tail;
5500 index = pop(); 5518 index = pop();
5501 } 5519 }
(...skipping 2087 matching lines...) Expand 10 before | Expand all | Expand 10 after
7589 if (unaliased is TypedefType) throw 'unable to unalias $type'; 7607 if (unaliased is TypedefType) throw 'unable to unalias $type';
7590 unaliased.accept(this, builder); 7608 unaliased.accept(this, builder);
7591 } 7609 }
7592 7610
7593 void visitDynamicType(DynamicType type, SsaBuilder builder) { 7611 void visitDynamicType(DynamicType type, SsaBuilder builder) {
7594 JavaScriptBackend backend = builder.compiler.backend; 7612 JavaScriptBackend backend = builder.compiler.backend;
7595 ClassElement cls = backend.findHelper('DynamicRuntimeType'); 7613 ClassElement cls = backend.findHelper('DynamicRuntimeType');
7596 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); 7614 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld)));
7597 } 7615 }
7598 } 7616 }
OLDNEW
« 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