OLD | NEW |
---|---|
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 js_ast; | 5 part of js_ast; |
6 | 6 |
7 abstract class NodeVisitor<T> { | 7 abstract class NodeVisitor<T> { |
8 T visitProgram(Program node); | 8 T visitProgram(Program node); |
9 | 9 |
10 T visitBlock(Block node); | 10 T visitBlock(Block node); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
42 | 42 |
43 T visitVariableUse(VariableUse node); | 43 T visitVariableUse(VariableUse node); |
44 T visitThis(This node); | 44 T visitThis(This node); |
45 T visitVariableDeclaration(VariableDeclaration node); | 45 T visitVariableDeclaration(VariableDeclaration node); |
46 T visitParameter(Parameter node); | 46 T visitParameter(Parameter node); |
47 T visitAccess(PropertyAccess node); | 47 T visitAccess(PropertyAccess node); |
48 | 48 |
49 T visitNamedFunction(NamedFunction node); | 49 T visitNamedFunction(NamedFunction node); |
50 T visitFun(Fun node); | 50 T visitFun(Fun node); |
51 | 51 |
52 T visitTokenExpression(TokenExpression node); | |
53 T visitTokenNumber(TokenNumber node); | |
54 T visitTokenString(TokenString node); | |
55 | |
52 T visitLiteralBool(LiteralBool node); | 56 T visitLiteralBool(LiteralBool node); |
53 T visitLiteralString(LiteralString node); | 57 T visitLiteralString(LiteralString node); |
54 T visitLiteralNumber(LiteralNumber node); | 58 T visitLiteralNumber(LiteralNumber node); |
55 T visitLiteralNull(LiteralNull node); | 59 T visitLiteralNull(LiteralNull node); |
56 | 60 |
61 T visitStringConcatenation(StringConcatenation node); | |
62 | |
57 T visitArrayInitializer(ArrayInitializer node); | 63 T visitArrayInitializer(ArrayInitializer node); |
58 T visitArrayHole(ArrayHole node); | 64 T visitArrayHole(ArrayHole node); |
59 T visitObjectInitializer(ObjectInitializer node); | 65 T visitObjectInitializer(ObjectInitializer node); |
60 T visitProperty(Property node); | 66 T visitProperty(Property node); |
61 T visitRegExpLiteral(RegExpLiteral node); | 67 T visitRegExpLiteral(RegExpLiteral node); |
62 | 68 |
63 T visitAwait(Await node); | 69 T visitAwait(Await node); |
64 | 70 |
65 T visitComment(Comment node); | 71 T visitComment(Comment node); |
66 | 72 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 | 138 |
133 T visitVariableUse(VariableUse node) => visitVariableReference(node); | 139 T visitVariableUse(VariableUse node) => visitVariableReference(node); |
134 T visitVariableDeclaration(VariableDeclaration node) | 140 T visitVariableDeclaration(VariableDeclaration node) |
135 => visitVariableReference(node); | 141 => visitVariableReference(node); |
136 T visitParameter(Parameter node) => visitVariableDeclaration(node); | 142 T visitParameter(Parameter node) => visitVariableDeclaration(node); |
137 T visitThis(This node) => visitParameter(node); | 143 T visitThis(This node) => visitParameter(node); |
138 | 144 |
139 T visitNamedFunction(NamedFunction node) => visitExpression(node); | 145 T visitNamedFunction(NamedFunction node) => visitExpression(node); |
140 T visitFun(Fun node) => visitExpression(node); | 146 T visitFun(Fun node) => visitExpression(node); |
141 | 147 |
148 T visitToken(Token node) => visitExpression(node); | |
149 | |
150 T visitTokenExpression(TokenExpression node) => visitExpression(node); | |
151 T visitTokenNumber(TokenNumber node) => visitToken(node); | |
152 T visitTokenString(TokenString node) => visitToken(node); | |
153 | |
142 T visitLiteral(Literal node) => visitExpression(node); | 154 T visitLiteral(Literal node) => visitExpression(node); |
143 | 155 |
144 T visitLiteralBool(LiteralBool node) => visitLiteral(node); | 156 T visitLiteralBool(LiteralBool node) => visitLiteral(node); |
145 T visitLiteralString(LiteralString node) => visitLiteral(node); | 157 T visitLiteralString(LiteralString node) => visitLiteral(node); |
146 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); | 158 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); |
147 T visitLiteralNull(LiteralNull node) => visitLiteral(node); | 159 T visitLiteralNull(LiteralNull node) => visitLiteral(node); |
148 | 160 |
161 T visitStringConcatenation(StringConcatenation node) => visitLiteral(node); | |
162 | |
149 T visitArrayInitializer(ArrayInitializer node) => visitExpression(node); | 163 T visitArrayInitializer(ArrayInitializer node) => visitExpression(node); |
150 T visitArrayHole(ArrayHole node) => visitExpression(node); | 164 T visitArrayHole(ArrayHole node) => visitExpression(node); |
151 T visitObjectInitializer(ObjectInitializer node) => visitExpression(node); | 165 T visitObjectInitializer(ObjectInitializer node) => visitExpression(node); |
152 T visitProperty(Property node) => visitNode(node); | 166 T visitProperty(Property node) => visitNode(node); |
153 T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node); | 167 T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node); |
154 | 168 |
155 T visitInterpolatedNode(InterpolatedNode node) => visitNode(node); | 169 T visitInterpolatedNode(InterpolatedNode node) => visitNode(node); |
156 | 170 |
157 T visitInterpolatedExpression(InterpolatedExpression node) | 171 T visitInterpolatedExpression(InterpolatedExpression node) |
158 => visitInterpolatedNode(node); | 172 => visitInterpolatedNode(node); |
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
909 void visitChildren(NodeVisitor visitor) { | 923 void visitChildren(NodeVisitor visitor) { |
910 receiver.accept(visitor); | 924 receiver.accept(visitor); |
911 selector.accept(visitor); | 925 selector.accept(visitor); |
912 } | 926 } |
913 | 927 |
914 PropertyAccess _clone() => new PropertyAccess(receiver, selector); | 928 PropertyAccess _clone() => new PropertyAccess(receiver, selector); |
915 | 929 |
916 int get precedenceLevel => CALL; | 930 int get precedenceLevel => CALL; |
917 } | 931 } |
918 | 932 |
933 abstract class Token extends Literal { | |
sra1
2015/05/27 19:38:51
These are abstract classes that are overridden.
De
herhut
2015/06/09 11:10:00
Well, this is only one use (the current use) of th
| |
934 void visitChildren(NodeVisitor visitor) {} | |
935 | |
936 Token _clone() => this; | |
937 } | |
938 | |
939 abstract class TokenNumber extends Token { | |
940 accept(NodeVisitor visitor) => visitor.visitTokenNumber(this); | |
941 | |
942 int get value; | |
943 } | |
944 | |
945 abstract class TokenString extends Token { | |
946 accept(NodeVisitor visitor) => visitor.visitTokenString(this); | |
947 | |
948 String get value; | |
949 } | |
950 | |
951 abstract class TokenExpression extends Token { | |
sra1
2015/05/27 19:38:51
What is a TokenExpression?
DeferredExpression?
herhut
2015/06/09 11:10:00
Done.
| |
952 accept(NodeVisitor visitor) => visitor.visitTokenExpression(this); | |
953 | |
954 Expression get value; | |
sra1
2015/05/27 19:38:51
What is the precedence?
PRIMARY is almost certainl
herhut
2015/06/09 11:10:00
It actually was correct for the current usage but
| |
955 } | |
956 | |
919 abstract class Literal extends Expression { | 957 abstract class Literal extends Expression { |
920 void visitChildren(NodeVisitor visitor) {} | 958 void visitChildren(NodeVisitor visitor) {} |
921 | 959 |
922 int get precedenceLevel => PRIMARY; | 960 int get precedenceLevel => PRIMARY; |
923 } | 961 } |
924 | 962 |
925 class LiteralBool extends Literal { | 963 class LiteralBool extends Literal { |
926 final bool value; | 964 final bool value; |
927 | 965 |
928 LiteralBool(this.value); | 966 LiteralBool(this.value); |
(...skipping 10 matching lines...) Expand all Loading... | |
939 LiteralNull _clone() => new LiteralNull(); | 977 LiteralNull _clone() => new LiteralNull(); |
940 } | 978 } |
941 | 979 |
942 class LiteralString extends Literal { | 980 class LiteralString extends Literal { |
943 final String value; | 981 final String value; |
944 | 982 |
945 /** | 983 /** |
946 * Constructs a LiteralString from a string value. | 984 * Constructs a LiteralString from a string value. |
947 * | 985 * |
948 * The constructor does not add the required quotes. If [value] is not | 986 * The constructor does not add the required quotes. If [value] is not |
949 * surrounded by quotes and property escaped, the resulting object is invalid | 987 * surrounded by quotes and properly escaped, the resulting object is invalid |
950 * as a JS value. | 988 * as a JS value. |
951 * | 989 * |
952 * TODO(sra): Introduce variants for known valid strings that don't allocate a | 990 * TODO(sra): Introduce variants for known valid strings that don't allocate a |
953 * new string just to add quotes. | 991 * new string just to add quotes. |
954 */ | 992 */ |
955 LiteralString(this.value); | 993 LiteralString(this.value); |
956 | 994 |
957 accept(NodeVisitor visitor) => visitor.visitLiteralString(this); | 995 accept(NodeVisitor visitor) => visitor.visitLiteralString(this); |
958 LiteralString _clone() => new LiteralString(value); | 996 LiteralString _clone() => new LiteralString(value); |
959 } | 997 } |
960 | 998 |
999 class StringConcatenation extends Literal { | |
1000 final List<Literal> parts; | |
1001 | |
1002 /** | |
1003 * Constructs a StringConcatenation from a list of Literal elements. | |
1004 * The constructor does not add surrounding quotes to the resulting | |
1005 * concatenated string. | |
1006 */ | |
1007 StringConcatenation(this.parts); | |
1008 | |
1009 accept(NodeVisitor visitor) => visitor.visitStringConcatenation(this); | |
1010 | |
1011 void visitChildren(NodeVisitor visitor) { | |
1012 for (Literal part in parts) part.accept(visitor); | |
1013 } | |
1014 | |
1015 StringConcatenation _clone() => new StringConcatenation(this.parts); | |
1016 } | |
1017 | |
961 class LiteralNumber extends Literal { | 1018 class LiteralNumber extends Literal { |
962 final String value; // Must be a valid JavaScript number literal. | 1019 final String value; // Must be a valid JavaScript number literal. |
963 | 1020 |
964 LiteralNumber(this.value); | 1021 LiteralNumber(this.value); |
965 | 1022 |
966 accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this); | 1023 accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this); |
967 LiteralNumber _clone() => new LiteralNumber(value); | 1024 LiteralNumber _clone() => new LiteralNumber(value); |
968 } | 1025 } |
969 | 1026 |
970 class ArrayInitializer extends Expression { | 1027 class ArrayInitializer extends Expression { |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1154 class Await extends Expression { | 1211 class Await extends Expression { |
1155 /** The awaited expression. */ | 1212 /** The awaited expression. */ |
1156 final Expression expression; | 1213 final Expression expression; |
1157 | 1214 |
1158 Await(this.expression); | 1215 Await(this.expression); |
1159 | 1216 |
1160 int get precedenceLevel => UNARY; | 1217 int get precedenceLevel => UNARY; |
1161 accept(NodeVisitor visitor) => visitor.visitAwait(this); | 1218 accept(NodeVisitor visitor) => visitor.visitAwait(this); |
1162 void visitChildren(NodeVisitor visitor) => expression.accept(visitor); | 1219 void visitChildren(NodeVisitor visitor) => expression.accept(visitor); |
1163 Await _clone() => new Await(expression); | 1220 Await _clone() => new Await(expression); |
1164 | |
1165 } | 1221 } |
1166 | 1222 |
1167 /** | 1223 /** |
1168 * A comment. | 1224 * A comment. |
1169 * | 1225 * |
1170 * Extends [Statement] so we can add comments before statements in | 1226 * Extends [Statement] so we can add comments before statements in |
1171 * [Block] and [Program]. | 1227 * [Block] and [Program]. |
1172 */ | 1228 */ |
1173 class Comment extends Statement { | 1229 class Comment extends Statement { |
1174 final String comment; | 1230 final String comment; |
1175 | 1231 |
1176 Comment(this.comment); | 1232 Comment(this.comment); |
1177 | 1233 |
1178 accept(NodeVisitor visitor) => visitor.visitComment(this); | 1234 accept(NodeVisitor visitor) => visitor.visitComment(this); |
1179 Comment _clone() => new Comment(comment); | 1235 Comment _clone() => new Comment(comment); |
1180 | 1236 |
1181 void visitChildren(NodeVisitor visitor) {} | 1237 void visitChildren(NodeVisitor visitor) {} |
1182 } | 1238 } |
OLD | NEW |