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

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

Issue 831133004: Use closure conversion in new dart2js 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;
11 import '../elements/elements.dart'; 11 import '../elements/elements.dart';
12 import '../universe/universe.dart'; 12 import '../universe/universe.dart';
13 import '../universe/universe.dart' show Selector; 13 import '../universe/universe.dart' show Selector;
14 import 'optimization/optimization.dart'; 14 import 'optimization/optimization.dart';
15 import '../closure.dart' show ClosureClassElement;
15 16
16 // The Tree language is the target of translation out of the CPS-based IR. 17 // The Tree language is the target of translation out of the CPS-based IR.
17 // 18 //
18 // The translation from CPS to Dart consists of several stages. Among the 19 // The translation from CPS to Dart consists of several stages. Among the
19 // stages are translation to direct style, translation out of SSA, eliminating 20 // stages are translation to direct style, translation out of SSA, eliminating
20 // unnecessary names, recognizing high-level control constructs. Combining 21 // unnecessary names, recognizing high-level control constructs. Combining
21 // these separate concerns is complicated and the constraints of the CPS-based 22 // these separate concerns is complicated and the constraints of the CPS-based
22 // language do not permit a multi-stage translation. 23 // language do not permit a multi-stage translation.
23 // 24 //
24 // For that reason, CPS is translated to the direct-style language Tree. 25 // For that reason, CPS is translated to the direct-style language Tree.
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 Statement body, 644 Statement body,
644 this.initializers, 645 this.initializers,
645 List<ConstDeclaration> localConstants, 646 List<ConstDeclaration> localConstants,
646 List<ConstantExpression> defaultParameterValues) 647 List<ConstantExpression> defaultParameterValues)
647 : super(element, parameters, body, localConstants, 648 : super(element, parameters, body, localConstants,
648 defaultParameterValues); 649 defaultParameterValues);
649 650
650 applyPass(Pass pass) => pass.rewriteConstructorDefinition(this); 651 applyPass(Pass pass) => pass.rewriteConstructorDefinition(this);
651 } 652 }
652 653
654 abstract class JsSpecificNode implements Node {}
655
656 class CreateBox extends Expression implements JsSpecificNode {
657 accept(ExpressionVisitor visitor) => visitor.visitCreateBox(this);
658 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitCreateBox(this, arg);
659 }
660
661 class CreateClosureClass extends Expression implements JsSpecificNode {
662 ClosureClassElement classElement;
663 List<Expression> arguments;
664
665 CreateClosureClass(this.classElement, this.arguments);
666
667 accept(ExpressionVisitor visitor) => visitor.visitCreateClosureClass(this);
668 accept1(ExpressionVisitor1 visitor, arg) {
669 return visitor.visitCreateClosureClass(this, arg);
670 }
671 }
672
673 class GetField extends Expression implements JsSpecificNode {
674 Expression object;
675 Element field;
676
677 GetField(this.object, this.field);
678
679 accept(ExpressionVisitor visitor) => visitor.visitGetField(this);
680 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitGetField(this, arg);
681 }
682
683 class SetField extends Statement implements JsSpecificNode {
684 Expression object;
685 Element field;
686 Expression value;
687 Statement next;
688
689 SetField(this.object, this.field, this.value, this.next);
690
691 accept(StatementVisitor visitor) => visitor.visitSetField(this);
692 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg);
693 }
694
653 abstract class ExpressionVisitor<E> { 695 abstract class ExpressionVisitor<E> {
654 E visitExpression(Expression e) => e.accept(this); 696 E visitExpression(Expression e) => e.accept(this);
655 E visitVariable(Variable node); 697 E visitVariable(Variable node);
656 E visitInvokeStatic(InvokeStatic node); 698 E visitInvokeStatic(InvokeStatic node);
657 E visitInvokeMethod(InvokeMethod node); 699 E visitInvokeMethod(InvokeMethod node);
658 E visitInvokeSuperMethod(InvokeSuperMethod node); 700 E visitInvokeSuperMethod(InvokeSuperMethod node);
659 E visitInvokeConstructor(InvokeConstructor node); 701 E visitInvokeConstructor(InvokeConstructor node);
660 E visitConcatenateStrings(ConcatenateStrings node); 702 E visitConcatenateStrings(ConcatenateStrings node);
661 E visitConstant(Constant node); 703 E visitConstant(Constant node);
662 E visitThis(This node); 704 E visitThis(This node);
663 E visitReifyTypeVar(ReifyTypeVar node); 705 E visitReifyTypeVar(ReifyTypeVar node);
664 E visitConditional(Conditional node); 706 E visitConditional(Conditional node);
665 E visitLogicalOperator(LogicalOperator node); 707 E visitLogicalOperator(LogicalOperator node);
666 E visitNot(Not node); 708 E visitNot(Not node);
667 E visitLiteralList(LiteralList node); 709 E visitLiteralList(LiteralList node);
668 E visitLiteralMap(LiteralMap node); 710 E visitLiteralMap(LiteralMap node);
669 E visitTypeOperator(TypeOperator node); 711 E visitTypeOperator(TypeOperator node);
670 E visitFunctionExpression(FunctionExpression node); 712 E visitFunctionExpression(FunctionExpression node);
671 E visitFieldInitializer(FieldInitializer node); 713 E visitFieldInitializer(FieldInitializer node);
672 E visitSuperInitializer(SuperInitializer node); 714 E visitSuperInitializer(SuperInitializer node);
715 E visitGetField(GetField node);
716 E visitCreateBox(CreateBox node);
717 E visitCreateClosureClass(CreateClosureClass node);
673 } 718 }
674 719
675 abstract class ExpressionVisitor1<E, A> { 720 abstract class ExpressionVisitor1<E, A> {
676 E visitExpression(Expression e, A arg) => e.accept1(this, arg); 721 E visitExpression(Expression e, A arg) => e.accept1(this, arg);
677 E visitVariable(Variable node, A arg); 722 E visitVariable(Variable node, A arg);
678 E visitInvokeStatic(InvokeStatic node, A arg); 723 E visitInvokeStatic(InvokeStatic node, A arg);
679 E visitInvokeMethod(InvokeMethod node, A arg); 724 E visitInvokeMethod(InvokeMethod node, A arg);
680 E visitInvokeSuperMethod(InvokeSuperMethod node, A arg); 725 E visitInvokeSuperMethod(InvokeSuperMethod node, A arg);
681 E visitInvokeConstructor(InvokeConstructor node, A arg); 726 E visitInvokeConstructor(InvokeConstructor node, A arg);
682 E visitConcatenateStrings(ConcatenateStrings node, A arg); 727 E visitConcatenateStrings(ConcatenateStrings node, A arg);
683 E visitConstant(Constant node, A arg); 728 E visitConstant(Constant node, A arg);
684 E visitThis(This node, A arg); 729 E visitThis(This node, A arg);
685 E visitReifyTypeVar(ReifyTypeVar node, A arg); 730 E visitReifyTypeVar(ReifyTypeVar node, A arg);
686 E visitConditional(Conditional node, A arg); 731 E visitConditional(Conditional node, A arg);
687 E visitLogicalOperator(LogicalOperator node, A arg); 732 E visitLogicalOperator(LogicalOperator node, A arg);
688 E visitNot(Not node, A arg); 733 E visitNot(Not node, A arg);
689 E visitLiteralList(LiteralList node, A arg); 734 E visitLiteralList(LiteralList node, A arg);
690 E visitLiteralMap(LiteralMap node, A arg); 735 E visitLiteralMap(LiteralMap node, A arg);
691 E visitTypeOperator(TypeOperator node, A arg); 736 E visitTypeOperator(TypeOperator node, A arg);
692 E visitFunctionExpression(FunctionExpression node, A arg); 737 E visitFunctionExpression(FunctionExpression node, A arg);
693 E visitFieldInitializer(FieldInitializer node, A arg); 738 E visitFieldInitializer(FieldInitializer node, A arg);
694 E visitSuperInitializer(SuperInitializer node, A arg); 739 E visitSuperInitializer(SuperInitializer node, A arg);
740 E visitGetField(GetField node, A arg);
741 E visitCreateBox(CreateBox node, A arg);
742 E visitCreateClosureClass(CreateClosureClass node, A arg);
695 } 743 }
696 744
697 abstract class StatementVisitor<S> { 745 abstract class StatementVisitor<S> {
698 S visitStatement(Statement s) => s.accept(this); 746 S visitStatement(Statement s) => s.accept(this);
699 S visitLabeledStatement(LabeledStatement node); 747 S visitLabeledStatement(LabeledStatement node);
700 S visitAssign(Assign node); 748 S visitAssign(Assign node);
701 S visitReturn(Return node); 749 S visitReturn(Return node);
702 S visitBreak(Break node); 750 S visitBreak(Break node);
703 S visitContinue(Continue node); 751 S visitContinue(Continue node);
704 S visitIf(If node); 752 S visitIf(If node);
705 S visitWhileTrue(WhileTrue node); 753 S visitWhileTrue(WhileTrue node);
706 S visitWhileCondition(WhileCondition node); 754 S visitWhileCondition(WhileCondition node);
707 S visitFunctionDeclaration(FunctionDeclaration node); 755 S visitFunctionDeclaration(FunctionDeclaration node);
708 S visitExpressionStatement(ExpressionStatement node); 756 S visitExpressionStatement(ExpressionStatement node);
757 S visitSetField(SetField node);
709 } 758 }
710 759
711 abstract class StatementVisitor1<S, A> { 760 abstract class StatementVisitor1<S, A> {
712 S visitStatement(Statement s, A arg) => s.accept1(this, arg); 761 S visitStatement(Statement s, A arg) => s.accept1(this, arg);
713 S visitLabeledStatement(LabeledStatement node, A arg); 762 S visitLabeledStatement(LabeledStatement node, A arg);
714 S visitAssign(Assign node, A arg); 763 S visitAssign(Assign node, A arg);
715 S visitReturn(Return node, A arg); 764 S visitReturn(Return node, A arg);
716 S visitBreak(Break node, A arg); 765 S visitBreak(Break node, A arg);
717 S visitContinue(Continue node, A arg); 766 S visitContinue(Continue node, A arg);
718 S visitIf(If node, A arg); 767 S visitIf(If node, A arg);
719 S visitWhileTrue(WhileTrue node, A arg); 768 S visitWhileTrue(WhileTrue node, A arg);
720 S visitWhileCondition(WhileCondition node, A arg); 769 S visitWhileCondition(WhileCondition node, A arg);
721 S visitFunctionDeclaration(FunctionDeclaration node, A arg); 770 S visitFunctionDeclaration(FunctionDeclaration node, A arg);
722 S visitExpressionStatement(ExpressionStatement node, A arg); 771 S visitExpressionStatement(ExpressionStatement node, A arg);
772 S visitSetField(SetField node, A arg);
723 } 773 }
724 774
725 abstract class Visitor<S, E> implements ExpressionVisitor<E>, 775 abstract class Visitor<S, E> implements ExpressionVisitor<E>,
726 StatementVisitor<S> { 776 StatementVisitor<S> {
727 E visitExpression(Expression e) => e.accept(this); 777 E visitExpression(Expression e) => e.accept(this);
728 S visitStatement(Statement s) => s.accept(this); 778 S visitStatement(Statement s) => s.accept(this);
729 } 779 }
730 780
731 abstract class Visitor1<S, E, A> implements ExpressionVisitor1<E, A>, 781 abstract class Visitor1<S, E, A> implements ExpressionVisitor1<E, A>,
732 StatementVisitor1<S, A> { 782 StatementVisitor1<S, A> {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 visitStatement(node.next); 897 visitStatement(node.next);
848 } 898 }
849 899
850 visitFieldInitializer(FieldInitializer node) { 900 visitFieldInitializer(FieldInitializer node) {
851 visitStatement(node.body); 901 visitStatement(node.body);
852 } 902 }
853 903
854 visitSuperInitializer(SuperInitializer node) { 904 visitSuperInitializer(SuperInitializer node) {
855 node.arguments.forEach(visitStatement); 905 node.arguments.forEach(visitStatement);
856 } 906 }
907
908 visitGetField(GetField node) {
909 visitExpression(node.object);
910 }
911
912 visitSetField(SetField node) {
913 visitExpression(node.object);
914 visitExpression(node.value);
915 visitStatement(node.next);
916 }
917
918 visitCreateBox(CreateBox node) {
919 }
920
921 visitCreateClosureClass(CreateClosureClass node) {
922 node.arguments.forEach(visitExpression);
923 }
857 } 924 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698