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

Side by Side Diff: pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart

Issue 1018403002: Revert "Use an explicit 'this' parameter instead of 'This' nodes." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 // IrNodes are kept in a separate library to have precise control over their 5 // IrNodes are kept in a separate library to have precise control over their
6 // dependencies on other parts of the system. 6 // dependencies on other parts of the system.
7 library dart2js.ir_nodes; 7 library dart2js.ir_nodes;
8 8
9 import '../constants/expressions.dart'; 9 import '../constants/expressions.dart';
10 import '../constants/values.dart' as values show ConstantValue; 10 import '../constants/values.dart' as values show ConstantValue;
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 class Constant extends Primitive { 631 class Constant extends Primitive {
632 final ConstantExpression expression; 632 final ConstantExpression expression;
633 633
634 Constant(this.expression); 634 Constant(this.expression);
635 635
636 values.ConstantValue get value => expression.value; 636 values.ConstantValue get value => expression.value;
637 637
638 accept(Visitor visitor) => visitor.visitConstant(this); 638 accept(Visitor visitor) => visitor.visitConstant(this);
639 } 639 }
640 640
641 class This extends Primitive {
642 This();
643
644 accept(Visitor visitor) => visitor.visitThis(this);
645 }
646
641 /// Reify the given type variable as a [Type]. 647 /// Reify the given type variable as a [Type].
642 /// This depends on the current binding of 'this'. 648 /// This depends on the current binding of 'this'.
643 class ReifyTypeVar extends Primitive implements DartSpecificNode { 649 class ReifyTypeVar extends Primitive implements DartSpecificNode {
644 final TypeVariableElement typeVariable; 650 final TypeVariableElement typeVariable;
645 651
646 ReifyTypeVar(this.typeVariable); 652 ReifyTypeVar(this.typeVariable);
647 653
648 values.ConstantValue get constant => null; 654 values.ConstantValue get constant => null;
649 655
650 accept(Visitor visitor) => visitor.visitReifyTypeVar(this); 656 accept(Visitor visitor) => visitor.visitReifyTypeVar(this);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 super.hint = hint; 699 super.hint = hint;
694 } 700 }
695 701
696 // In addition to a parent pointer to the containing Continuation or 702 // In addition to a parent pointer to the containing Continuation or
697 // FunctionDefinition, parameters have an index into the list of parameters 703 // FunctionDefinition, parameters have an index into the list of parameters
698 // bound by the parent. This gives constant-time access to the continuation 704 // bound by the parent. This gives constant-time access to the continuation
699 // from the parent. 705 // from the parent.
700 int parentIndex; 706 int parentIndex;
701 707
702 accept(Visitor visitor) => visitor.visitParameter(this); 708 accept(Visitor visitor) => visitor.visitParameter(this);
703
704 String toString() => 'Parameter(${hint == null ? null : hint.name})';
705 } 709 }
706 710
707 /// Continuations are normally bound by 'let cont'. A continuation with one 711 /// Continuations are normally bound by 'let cont'. A continuation with one
708 /// parameter and no body is used to represent a function's return continuation. 712 /// parameter and no body is used to represent a function's return continuation.
709 /// The return continuation is bound by the Function, not by 'let cont'. 713 /// The return continuation is bound by the Function, not by 'let cont'.
710 class Continuation extends Definition<Continuation> implements InteriorNode { 714 class Continuation extends Definition<Continuation> implements InteriorNode {
711 final List<Parameter> parameters; 715 final List<Parameter> parameters;
712 Expression body = null; 716 Expression body = null;
713 717
714 // In addition to a parent pointer to the containing LetCont, continuations 718 // In addition to a parent pointer to the containing LetCont, continuations
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 final Continuation returnContinuation; 790 final Continuation returnContinuation;
787 RunnableBody(this.body, this.returnContinuation); 791 RunnableBody(this.body, this.returnContinuation);
788 accept(Visitor visitor) => visitor.visitRunnableBody(this); 792 accept(Visitor visitor) => visitor.visitRunnableBody(this);
789 } 793 }
790 794
791 /// A function definition, consisting of parameters and a body. The parameters 795 /// A function definition, consisting of parameters and a body. The parameters
792 /// include a distinguished continuation parameter (held by the body). 796 /// include a distinguished continuation parameter (held by the body).
793 class FunctionDefinition extends Node 797 class FunctionDefinition extends Node
794 implements ExecutableDefinition { 798 implements ExecutableDefinition {
795 final FunctionElement element; 799 final FunctionElement element;
796 final Parameter thisParameter;
797 /// Mixed list of [Parameter]s and [MutableVariable]s. 800 /// Mixed list of [Parameter]s and [MutableVariable]s.
798 final List<Definition> parameters; 801 final List<Definition> parameters;
799 final RunnableBody body; 802 final RunnableBody body;
800 final List<ConstDeclaration> localConstants; 803 final List<ConstDeclaration> localConstants;
801 804
802 /// Values for optional parameters. 805 /// Values for optional parameters.
803 final List<ConstantExpression> defaultParameterValues; 806 final List<ConstantExpression> defaultParameterValues;
804 807
805 FunctionDefinition(this.element, 808 FunctionDefinition(this.element,
806 this.thisParameter,
807 this.parameters, 809 this.parameters,
808 this.body, 810 this.body,
809 this.localConstants, 811 this.localConstants,
810 this.defaultParameterValues); 812 this.defaultParameterValues);
811 813
812 FunctionDefinition.abstract(this.element, 814 FunctionDefinition.abstract(this.element,
813 this.thisParameter,
814 this.parameters, 815 this.parameters,
815 this.defaultParameterValues) 816 this.defaultParameterValues)
816 : body = null, 817 : body = null,
817 localConstants = const <ConstDeclaration>[]; 818 localConstants = const <ConstDeclaration>[];
818 819
819 accept(Visitor visitor) => visitor.visitFunctionDefinition(this); 820 accept(Visitor visitor) => visitor.visitFunctionDefinition(this);
820 applyPass(Pass pass) => pass.rewriteFunctionDefinition(this); 821 applyPass(Pass pass) => pass.rewriteFunctionDefinition(this);
821 822
822 /// Returns `true` if this function is abstract or external. 823 /// Returns `true` if this function is abstract or external.
823 /// 824 ///
(...skipping 16 matching lines...) Expand all
840 final List<RunnableBody> arguments; 841 final List<RunnableBody> arguments;
841 final Selector selector; 842 final Selector selector;
842 SuperInitializer(this.target, this.arguments, this.selector); 843 SuperInitializer(this.target, this.arguments, this.selector);
843 accept(Visitor visitor) => visitor.visitSuperInitializer(this); 844 accept(Visitor visitor) => visitor.visitSuperInitializer(this);
844 } 845 }
845 846
846 class ConstructorDefinition extends FunctionDefinition { 847 class ConstructorDefinition extends FunctionDefinition {
847 final List<Initializer> initializers; 848 final List<Initializer> initializers;
848 849
849 ConstructorDefinition(ConstructorElement element, 850 ConstructorDefinition(ConstructorElement element,
850 Definition thisParameter, // only Dart
851 List<Definition> parameters, 851 List<Definition> parameters,
852 RunnableBody body, 852 RunnableBody body,
853 this.initializers, 853 this.initializers,
854 List<ConstDeclaration> localConstants, 854 List<ConstDeclaration> localConstants,
855 List<ConstantExpression> defaultParameterValues) 855 List<ConstantExpression> defaultParameterValues)
856 : super(element, thisParameter, parameters, body, localConstants, 856 : super(element, parameters, body, localConstants,
857 defaultParameterValues); 857 defaultParameterValues);
858 858
859 // 'Abstract' here means "has no body" and is used to represent external 859 // 'Abstract' here means "has no body" and is used to represent external
860 // constructors. 860 // constructors.
861 ConstructorDefinition.abstract( 861 ConstructorDefinition.abstract(
862 ConstructorElement element, 862 ConstructorElement element,
863 List<Definition> parameters, 863 List<Definition> parameters,
864 List<ConstantExpression> defaultParameterValues) 864 List<ConstantExpression> defaultParameterValues)
865 : initializers = null, 865 : initializers = null,
866 super.abstract(element, null, parameters, defaultParameterValues); 866 super.abstract(element, parameters, defaultParameterValues);
867 867
868 accept(Visitor visitor) => visitor.visitConstructorDefinition(this); 868 accept(Visitor visitor) => visitor.visitConstructorDefinition(this);
869 applyPass(Pass pass) => pass.rewriteConstructorDefinition(this); 869 applyPass(Pass pass) => pass.rewriteConstructorDefinition(this);
870 } 870 }
871 871
872 /// Converts the internal representation of a type to a Dart object of type 872 /// Converts the internal representation of a type to a Dart object of type
873 /// [Type]. 873 /// [Type].
874 class ReifyRuntimeType extends Primitive implements JsSpecificNode { 874 class ReifyRuntimeType extends Primitive implements JsSpecificNode {
875 /// Reference to the internal representation of a type (as produced, for 875 /// Reference to the internal representation of a type (as produced, for
876 /// example, by [ReadTypeVariable]). 876 /// example, by [ReadTypeVariable]).
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 T visitConcatenateStrings(ConcatenateStrings node); 930 T visitConcatenateStrings(ConcatenateStrings node);
931 T visitBranch(Branch node); 931 T visitBranch(Branch node);
932 T visitTypeOperator(TypeOperator node); 932 T visitTypeOperator(TypeOperator node);
933 T visitSetMutableVariable(SetMutableVariable node); 933 T visitSetMutableVariable(SetMutableVariable node);
934 T visitDeclareFunction(DeclareFunction node); 934 T visitDeclareFunction(DeclareFunction node);
935 935
936 // Definitions. 936 // Definitions.
937 T visitLiteralList(LiteralList node); 937 T visitLiteralList(LiteralList node);
938 T visitLiteralMap(LiteralMap node); 938 T visitLiteralMap(LiteralMap node);
939 T visitConstant(Constant node); 939 T visitConstant(Constant node);
940 T visitThis(This node);
940 T visitReifyTypeVar(ReifyTypeVar node); 941 T visitReifyTypeVar(ReifyTypeVar node);
941 T visitCreateFunction(CreateFunction node); 942 T visitCreateFunction(CreateFunction node);
942 T visitGetMutableVariable(GetMutableVariable node); 943 T visitGetMutableVariable(GetMutableVariable node);
943 T visitParameter(Parameter node); 944 T visitParameter(Parameter node);
944 T visitContinuation(Continuation node); 945 T visitContinuation(Continuation node);
945 T visitMutableVariable(MutableVariable node); 946 T visitMutableVariable(MutableVariable node);
946 947
947 // JavaScript specific nodes. 948 // JavaScript specific nodes.
948 949
949 // Conditions. 950 // Conditions.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 visitFieldDefinition(FieldDefinition node) { 983 visitFieldDefinition(FieldDefinition node) {
983 processFieldDefinition(node); 984 processFieldDefinition(node);
984 if (node.hasInitializer) { 985 if (node.hasInitializer) {
985 visit(node.body); 986 visit(node.body);
986 } 987 }
987 } 988 }
988 989
989 processFunctionDefinition(FunctionDefinition node) {} 990 processFunctionDefinition(FunctionDefinition node) {}
990 visitFunctionDefinition(FunctionDefinition node) { 991 visitFunctionDefinition(FunctionDefinition node) {
991 processFunctionDefinition(node); 992 processFunctionDefinition(node);
992 if (node.thisParameter != null) visit(node.thisParameter);
993 node.parameters.forEach(visit); 993 node.parameters.forEach(visit);
994 if (!node.isAbstract) { 994 if (!node.isAbstract) {
995 visit(node.body); 995 visit(node.body);
996 } 996 }
997 } 997 }
998 998
999 processConstructorDefinition(ConstructorDefinition node) {} 999 processConstructorDefinition(ConstructorDefinition node) {}
1000 visitConstructorDefinition(ConstructorDefinition node) { 1000 visitConstructorDefinition(ConstructorDefinition node) {
1001 processConstructorDefinition(node); 1001 processConstructorDefinition(node);
1002 if (node.thisParameter != null) visit(node.thisParameter);
1003 node.parameters.forEach(visit); 1002 node.parameters.forEach(visit);
1004 node.initializers.forEach(visit); 1003 node.initializers.forEach(visit);
1005 visit(node.body); 1004 visit(node.body);
1006 } 1005 }
1007 1006
1008 processFieldInitializer(FieldInitializer node) {} 1007 processFieldInitializer(FieldInitializer node) {}
1009 visitFieldInitializer(FieldInitializer node) { 1008 visitFieldInitializer(FieldInitializer node) {
1010 processFieldInitializer(node); 1009 processFieldInitializer(node);
1011 visit(node.body); 1010 visit(node.body);
1012 } 1011 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 processLiteralMap(node); 1135 processLiteralMap(node);
1137 for (LiteralMapEntry entry in node.entries) { 1136 for (LiteralMapEntry entry in node.entries) {
1138 processReference(entry.key); 1137 processReference(entry.key);
1139 processReference(entry.value); 1138 processReference(entry.value);
1140 } 1139 }
1141 } 1140 }
1142 1141
1143 processConstant(Constant node) {} 1142 processConstant(Constant node) {}
1144 visitConstant(Constant node) => processConstant(node); 1143 visitConstant(Constant node) => processConstant(node);
1145 1144
1145 processThis(This node) {}
1146 visitThis(This node) => processThis(node);
1147
1146 processReifyTypeVar(ReifyTypeVar node) {} 1148 processReifyTypeVar(ReifyTypeVar node) {}
1147 visitReifyTypeVar(ReifyTypeVar node) => processReifyTypeVar(node); 1149 visitReifyTypeVar(ReifyTypeVar node) => processReifyTypeVar(node);
1148 1150
1149 processCreateFunction(CreateFunction node) {} 1151 processCreateFunction(CreateFunction node) {}
1150 visitCreateFunction(CreateFunction node) { 1152 visitCreateFunction(CreateFunction node) {
1151 processCreateFunction(node); 1153 processCreateFunction(node);
1152 visit(node.definition); 1154 visit(node.definition);
1153 } 1155 }
1154 1156
1155 processMutableVariable(node) {} 1157 processMutableVariable(node) {}
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 } 1414 }
1413 } 1415 }
1414 1416
1415 void visitTypeOperator(TypeOperator node) { 1417 void visitTypeOperator(TypeOperator node) {
1416 visitReference(node.receiver); 1418 visitReference(node.receiver);
1417 } 1419 }
1418 1420
1419 void visitConstant(Constant node) { 1421 void visitConstant(Constant node) {
1420 } 1422 }
1421 1423
1424 void visitThis(This node) {
1425 }
1426
1422 void visitReifyTypeVar(ReifyTypeVar node) { 1427 void visitReifyTypeVar(ReifyTypeVar node) {
1423 } 1428 }
1424 1429
1425 void visitCreateFunction(CreateFunction node) { 1430 void visitCreateFunction(CreateFunction node) {
1426 new RegisterAllocator(internalError).visit(node.definition); 1431 new RegisterAllocator(internalError).visit(node.definition);
1427 } 1432 }
1428 1433
1429 void visitGetMutableVariable(GetMutableVariable node) { 1434 void visitGetMutableVariable(GetMutableVariable node) {
1430 } 1435 }
1431 1436
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 } 1499 }
1495 1500
1496 void visitReifyRuntimeType(ReifyRuntimeType node) { 1501 void visitReifyRuntimeType(ReifyRuntimeType node) {
1497 visitReference(node.value); 1502 visitReference(node.value);
1498 } 1503 }
1499 1504
1500 void visitReadTypeVariable(ReadTypeVariable node) { 1505 void visitReadTypeVariable(ReadTypeVariable node) {
1501 visitReference(node.target); 1506 visitReference(node.target);
1502 } 1507 }
1503 } 1508 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_integrity.dart ('k') | pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698