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

Side by Side Diff: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart

Issue 861713002: Handle super-method invocations in CPS->JS backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library tree_ir_nodes; 5 library tree_ir_nodes;
6 6
7 import '../constants/expressions.dart'; 7 import '../constants/expressions.dart';
8 import '../constants/values.dart' as values; 8 import '../constants/values.dart' as values;
9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir; 9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir;
10 import '../dart_types.dart' show DartType, GenericType; 10 import '../dart_types.dart' show DartType, GenericType;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 InvokeMethod(this.receiver, this.selector, this.arguments) { 152 InvokeMethod(this.receiver, this.selector, this.arguments) {
153 assert(receiver != null); 153 assert(receiver != null);
154 } 154 }
155 155
156 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethod(this); 156 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethod(this);
157 accept1(ExpressionVisitor1 visitor, arg) { 157 accept1(ExpressionVisitor1 visitor, arg) {
158 return visitor.visitInvokeMethod(this, arg); 158 return visitor.visitInvokeMethod(this, arg);
159 } 159 }
160 } 160 }
161 161
162 class InvokeSuperMethod extends Expression implements Invoke { 162 /// Invoke [target] on [receiver], bypassing ordinary dispatch semantics.
163 class InvokeMethodDirectly extends Expression implements Invoke {
164 Expression receiver;
165 final Element target;
163 final Selector selector; 166 final Selector selector;
164 final List<Expression> arguments; 167 final List<Expression> arguments;
165 168
166 InvokeSuperMethod(this.selector, this.arguments); 169 InvokeMethodDirectly(this.receiver, this.target, this.selector,
170 this.arguments);
167 171
168 accept(ExpressionVisitor visitor) => visitor.visitInvokeSuperMethod(this); 172 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethodDirectly(this);
169 accept1(ExpressionVisitor1 visitor, arg) { 173 accept1(ExpressionVisitor1 visitor, arg) {
170 return visitor.visitInvokeSuperMethod(this, arg); 174 return visitor.visitInvokeMethodDirectly(this, arg);
171 } 175 }
172 } 176 }
173 177
174 /** 178 /**
175 * Call to a factory or generative constructor. 179 * Call to a factory or generative constructor.
176 */ 180 */
177 class InvokeConstructor extends Expression implements Invoke { 181 class InvokeConstructor extends Expression implements Invoke {
178 final DartType type; 182 final DartType type;
179 final FunctionElement target; 183 final FunctionElement target;
180 final List<Expression> arguments; 184 final List<Expression> arguments;
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 694
691 accept(StatementVisitor visitor) => visitor.visitSetField(this); 695 accept(StatementVisitor visitor) => visitor.visitSetField(this);
692 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); 696 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg);
693 } 697 }
694 698
695 abstract class ExpressionVisitor<E> { 699 abstract class ExpressionVisitor<E> {
696 E visitExpression(Expression e) => e.accept(this); 700 E visitExpression(Expression e) => e.accept(this);
697 E visitVariable(Variable node); 701 E visitVariable(Variable node);
698 E visitInvokeStatic(InvokeStatic node); 702 E visitInvokeStatic(InvokeStatic node);
699 E visitInvokeMethod(InvokeMethod node); 703 E visitInvokeMethod(InvokeMethod node);
700 E visitInvokeSuperMethod(InvokeSuperMethod node); 704 E visitInvokeMethodDirectly(InvokeMethodDirectly node);
701 E visitInvokeConstructor(InvokeConstructor node); 705 E visitInvokeConstructor(InvokeConstructor node);
702 E visitConcatenateStrings(ConcatenateStrings node); 706 E visitConcatenateStrings(ConcatenateStrings node);
703 E visitConstant(Constant node); 707 E visitConstant(Constant node);
704 E visitThis(This node); 708 E visitThis(This node);
705 E visitReifyTypeVar(ReifyTypeVar node); 709 E visitReifyTypeVar(ReifyTypeVar node);
706 E visitConditional(Conditional node); 710 E visitConditional(Conditional node);
707 E visitLogicalOperator(LogicalOperator node); 711 E visitLogicalOperator(LogicalOperator node);
708 E visitNot(Not node); 712 E visitNot(Not node);
709 E visitLiteralList(LiteralList node); 713 E visitLiteralList(LiteralList node);
710 E visitLiteralMap(LiteralMap node); 714 E visitLiteralMap(LiteralMap node);
711 E visitTypeOperator(TypeOperator node); 715 E visitTypeOperator(TypeOperator node);
712 E visitFunctionExpression(FunctionExpression node); 716 E visitFunctionExpression(FunctionExpression node);
713 E visitFieldInitializer(FieldInitializer node); 717 E visitFieldInitializer(FieldInitializer node);
714 E visitSuperInitializer(SuperInitializer node); 718 E visitSuperInitializer(SuperInitializer node);
715 E visitGetField(GetField node); 719 E visitGetField(GetField node);
716 E visitCreateBox(CreateBox node); 720 E visitCreateBox(CreateBox node);
717 E visitCreateClosureClass(CreateClosureClass node); 721 E visitCreateClosureClass(CreateClosureClass node);
718 } 722 }
719 723
720 abstract class ExpressionVisitor1<E, A> { 724 abstract class ExpressionVisitor1<E, A> {
721 E visitExpression(Expression e, A arg) => e.accept1(this, arg); 725 E visitExpression(Expression e, A arg) => e.accept1(this, arg);
722 E visitVariable(Variable node, A arg); 726 E visitVariable(Variable node, A arg);
723 E visitInvokeStatic(InvokeStatic node, A arg); 727 E visitInvokeStatic(InvokeStatic node, A arg);
724 E visitInvokeMethod(InvokeMethod node, A arg); 728 E visitInvokeMethod(InvokeMethod node, A arg);
725 E visitInvokeSuperMethod(InvokeSuperMethod node, A arg); 729 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
726 E visitInvokeConstructor(InvokeConstructor node, A arg); 730 E visitInvokeConstructor(InvokeConstructor node, A arg);
727 E visitConcatenateStrings(ConcatenateStrings node, A arg); 731 E visitConcatenateStrings(ConcatenateStrings node, A arg);
728 E visitConstant(Constant node, A arg); 732 E visitConstant(Constant node, A arg);
729 E visitThis(This node, A arg); 733 E visitThis(This node, A arg);
730 E visitReifyTypeVar(ReifyTypeVar node, A arg); 734 E visitReifyTypeVar(ReifyTypeVar node, A arg);
731 E visitConditional(Conditional node, A arg); 735 E visitConditional(Conditional node, A arg);
732 E visitLogicalOperator(LogicalOperator node, A arg); 736 E visitLogicalOperator(LogicalOperator node, A arg);
733 E visitNot(Not node, A arg); 737 E visitNot(Not node, A arg);
734 E visitLiteralList(LiteralList node, A arg); 738 E visitLiteralList(LiteralList node, A arg);
735 E visitLiteralMap(LiteralMap node, A arg); 739 E visitLiteralMap(LiteralMap node, A arg);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 797
794 visitInvokeStatic(InvokeStatic node) { 798 visitInvokeStatic(InvokeStatic node) {
795 node.arguments.forEach(visitExpression); 799 node.arguments.forEach(visitExpression);
796 } 800 }
797 801
798 visitInvokeMethod(InvokeMethod node) { 802 visitInvokeMethod(InvokeMethod node) {
799 visitExpression(node.receiver); 803 visitExpression(node.receiver);
800 node.arguments.forEach(visitExpression); 804 node.arguments.forEach(visitExpression);
801 } 805 }
802 806
803 visitInvokeSuperMethod(InvokeSuperMethod node) { 807 visitInvokeMethodDirectly(InvokeMethodDirectly node) {
808 visitExpression(node.receiver);
804 node.arguments.forEach(visitExpression); 809 node.arguments.forEach(visitExpression);
805 } 810 }
806 811
807 visitInvokeConstructor(InvokeConstructor node) { 812 visitInvokeConstructor(InvokeConstructor node) {
808 node.arguments.forEach(visitExpression); 813 node.arguments.forEach(visitExpression);
809 } 814 }
810 815
811 visitConcatenateStrings(ConcatenateStrings node) { 816 visitConcatenateStrings(ConcatenateStrings node) {
812 node.arguments.forEach(visitExpression); 817 node.arguments.forEach(visitExpression);
813 } 818 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 visitStatement(node.next); 920 visitStatement(node.next);
916 } 921 }
917 922
918 visitCreateBox(CreateBox node) { 923 visitCreateBox(CreateBox node) {
919 } 924 }
920 925
921 visitCreateClosureClass(CreateClosureClass node) { 926 visitCreateClosureClass(CreateClosureClass node) {
922 node.arguments.forEach(visitExpression); 927 node.arguments.forEach(visitExpression);
923 } 928 }
924 } 929 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698