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

Side by Side Diff: pkg/compiler/lib/src/js/nodes.dart

Issue 750323003: Remove js.ArrayElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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) 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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698