| 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; | 5 part of js; |
| 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 visitLiteralBool(LiteralBool node); | 52 T visitLiteralBool(LiteralBool node); |
| 53 T visitLiteralString(LiteralString node); | 53 T visitLiteralString(LiteralString node); |
| 54 T visitLiteralNumber(LiteralNumber node); | 54 T visitLiteralNumber(LiteralNumber node); |
| 55 T visitLiteralNull(LiteralNull node); | 55 T visitLiteralNull(LiteralNull node); |
| 56 | 56 |
| 57 T visitArrayInitializer(ArrayInitializer node); | 57 T visitArrayInitializer(ArrayInitializer node); |
| 58 T visitArrayElement(ArrayElement node); | 58 T visitArrayHole(ArrayHole node); |
| 59 T visitObjectInitializer(ObjectInitializer node); | 59 T visitObjectInitializer(ObjectInitializer node); |
| 60 T visitProperty(Property node); | 60 T visitProperty(Property node); |
| 61 T visitRegExpLiteral(RegExpLiteral node); | 61 T visitRegExpLiteral(RegExpLiteral node); |
| 62 | 62 |
| 63 T visitComment(Comment node); | 63 T visitComment(Comment node); |
| 64 | 64 |
| 65 T visitInterpolatedExpression(InterpolatedExpression node); | 65 T visitInterpolatedExpression(InterpolatedExpression node); |
| 66 T visitInterpolatedLiteral(InterpolatedLiteral node); | 66 T visitInterpolatedLiteral(InterpolatedLiteral node); |
| 67 T visitInterpolatedParameter(InterpolatedParameter node); | 67 T visitInterpolatedParameter(InterpolatedParameter node); |
| 68 T visitInterpolatedSelector(InterpolatedSelector node); | 68 T visitInterpolatedSelector(InterpolatedSelector node); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 T visitFun(Fun node) => visitExpression(node); | 138 T visitFun(Fun node) => visitExpression(node); |
| 139 | 139 |
| 140 T visitLiteral(Literal node) => visitExpression(node); | 140 T visitLiteral(Literal node) => visitExpression(node); |
| 141 | 141 |
| 142 T visitLiteralBool(LiteralBool node) => visitLiteral(node); | 142 T visitLiteralBool(LiteralBool node) => visitLiteral(node); |
| 143 T visitLiteralString(LiteralString node) => visitLiteral(node); | 143 T visitLiteralString(LiteralString node) => visitLiteral(node); |
| 144 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); | 144 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); |
| 145 T visitLiteralNull(LiteralNull node) => visitLiteral(node); | 145 T visitLiteralNull(LiteralNull node) => visitLiteral(node); |
| 146 | 146 |
| 147 T visitArrayInitializer(ArrayInitializer node) => visitExpression(node); | 147 T visitArrayInitializer(ArrayInitializer node) => visitExpression(node); |
| 148 T visitArrayElement(ArrayElement node) => visitNode(node); | 148 T visitArrayHole(ArrayHole node) => visitExpression(node); |
| 149 T visitObjectInitializer(ObjectInitializer node) => visitExpression(node); | 149 T visitObjectInitializer(ObjectInitializer node) => visitExpression(node); |
| 150 T visitProperty(Property node) => visitNode(node); | 150 T visitProperty(Property node) => visitNode(node); |
| 151 T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node); | 151 T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node); |
| 152 | 152 |
| 153 T visitInterpolatedNode(InterpolatedNode node) => visitNode(node); | 153 T visitInterpolatedNode(InterpolatedNode node) => visitNode(node); |
| 154 | 154 |
| 155 T visitInterpolatedExpression(InterpolatedExpression node) | 155 T visitInterpolatedExpression(InterpolatedExpression node) |
| 156 => visitInterpolatedNode(node); | 156 => visitInterpolatedNode(node); |
| 157 T visitInterpolatedLiteral(InterpolatedLiteral node) | 157 T visitInterpolatedLiteral(InterpolatedLiteral node) |
| 158 => visitInterpolatedNode(node); | 158 => visitInterpolatedNode(node); |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 class LiteralNumber extends Literal { | 927 class LiteralNumber extends Literal { |
| 928 final String value; | 928 final String value; |
| 929 | 929 |
| 930 LiteralNumber(this.value); | 930 LiteralNumber(this.value); |
| 931 | 931 |
| 932 accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this); | 932 accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this); |
| 933 LiteralNumber _clone() => new LiteralNumber(value); | 933 LiteralNumber _clone() => new LiteralNumber(value); |
| 934 } | 934 } |
| 935 | 935 |
| 936 class ArrayInitializer extends Expression { | 936 class ArrayInitializer extends Expression { |
| 937 final int length; | 937 final List<Expression> elements; |
| 938 // We represent the array as sparse list of elements. Each element knows its | |
| 939 // position in the array. | |
| 940 final List<ArrayElement> elements; | |
| 941 | 938 |
| 942 ArrayInitializer(this.length, this.elements); | 939 ArrayInitializer(this.elements); |
| 943 | |
| 944 factory ArrayInitializer.from(Iterable<Expression> expressions) { | |
| 945 List<ArrayElement> elements = _convert(expressions); | |
| 946 return new ArrayInitializer(elements.length, elements); | |
| 947 } | |
| 948 | 940 |
| 949 accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this); | 941 accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this); |
| 950 | 942 |
| 951 void visitChildren(NodeVisitor visitor) { | 943 void visitChildren(NodeVisitor visitor) { |
| 952 for (ArrayElement element in elements) element.accept(visitor); | 944 for (Expression element in elements) element.accept(visitor); |
| 953 } | 945 } |
| 954 | 946 |
| 955 ArrayInitializer _clone() => new ArrayInitializer(length, elements); | 947 ArrayInitializer _clone() => new ArrayInitializer(elements); |
| 956 | 948 |
| 957 int get precedenceLevel => PRIMARY; | 949 int get precedenceLevel => PRIMARY; |
| 958 | |
| 959 static List<ArrayElement> _convert(Iterable<Expression> expressions) { | |
| 960 int index = 0; | |
| 961 return expressions.map( | |
| 962 (expression) => new ArrayElement(index++, expression)) | |
| 963 .toList(); | |
| 964 } | |
| 965 } | 950 } |
| 966 | 951 |
| 967 /** | 952 /** |
| 968 * An expression inside an [ArrayInitializer]. An [ArrayElement] knows | 953 * An empty place in an [ArrayInitializer]. |
| 969 * its position in the containing [ArrayInitializer]. | 954 * For example the list [1, , , 2] would contain two holes. |
| 970 */ | 955 */ |
| 971 class ArrayElement extends Node { | 956 class ArrayHole extends Expression { |
| 972 final int index; | 957 accept(NodeVisitor visitor) => visitor.visitArrayHole(this); |
| 973 final Expression value; | |
| 974 | 958 |
| 975 ArrayElement(this.index, this.value); | 959 void visitChildren(NodeVisitor visitor) {} |
| 976 | 960 |
| 977 accept(NodeVisitor visitor) => visitor.visitArrayElement(this); | 961 ArrayHole _clone() => new ArrayHole(); |
| 978 | 962 |
| 979 void visitChildren(NodeVisitor visitor) { | 963 int get precedenceLevel => PRIMARY; |
| 980 value.accept(visitor); | |
| 981 } | |
| 982 | |
| 983 ArrayElement _clone() => new ArrayElement(index, value); | |
| 984 } | 964 } |
| 985 | 965 |
| 986 class ObjectInitializer extends Expression { | 966 class ObjectInitializer extends Expression { |
| 987 final List<Property> properties; | 967 final List<Property> properties; |
| 988 final bool isOneLiner; | 968 final bool isOneLiner; |
| 989 | 969 |
| 990 /** | 970 /** |
| 991 * Constructs a new object-initializer containing the given [properties]. | 971 * Constructs a new object-initializer containing the given [properties]. |
| 992 * | 972 * |
| 993 * [isOneLiner] describes the behaviour when pretty-printing (non-minified). | 973 * [isOneLiner] describes the behaviour when pretty-printing (non-minified). |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 class Comment extends Statement { | 1100 class Comment extends Statement { |
| 1121 final String comment; | 1101 final String comment; |
| 1122 | 1102 |
| 1123 Comment(this.comment); | 1103 Comment(this.comment); |
| 1124 | 1104 |
| 1125 accept(NodeVisitor visitor) => visitor.visitComment(this); | 1105 accept(NodeVisitor visitor) => visitor.visitComment(this); |
| 1126 Comment _clone() => new Comment(comment); | 1106 Comment _clone() => new Comment(comment); |
| 1127 | 1107 |
| 1128 void visitChildren(NodeVisitor visitor) {} | 1108 void visitChildren(NodeVisitor visitor) {} |
| 1129 } | 1109 } |
| OLD | NEW |