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

Side by Side Diff: pkg/polymer_expressions/lib/expression.dart

Issue 141703024: Refactor of PolymerExpressions. Adds "as" expressions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments Created 6 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 library polymer_expressions.expression; 5 library polymer_expressions.expression;
6 6
7 import 'visitor.dart'; 7 import 'visitor.dart';
8 8
9 // Helper functions for building expression trees programmatically 9 // Helper functions for building expression trees programmatically
10 10
11 EmptyExpression empty() => const EmptyExpression(); 11 EmptyExpression empty() => const EmptyExpression();
12 Literal literal(v) => new Literal(v); 12 Literal literal(v) => new Literal(v);
13 ListLiteral listLiteral(List<Expression> items) => new ListLiteral(items); 13 ListLiteral listLiteral(List<Expression> items) => new ListLiteral(items);
14 MapLiteral mapLiteral(List<MapLiteralEntry> entries) => new MapLiteral(entries); 14 MapLiteral mapLiteral(List<MapLiteralEntry> entries) => new MapLiteral(entries);
15 MapLiteralEntry mapLiteralEntry(Literal key, Expression value) => 15 MapLiteralEntry mapLiteralEntry(Literal key, Expression value) =>
16 new MapLiteralEntry(key, value); 16 new MapLiteralEntry(key, value);
17 Identifier ident(String v) => new Identifier(v); 17 Identifier ident(String v) => new Identifier(v);
18 ParenthesizedExpression paren(Expression e) => new ParenthesizedExpression(e); 18 ParenthesizedExpression paren(Expression e) => new ParenthesizedExpression(e);
19 UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e); 19 UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e);
20 BinaryOperator binary(Expression l, String op, Expression r) => 20 BinaryOperator binary(Expression l, String op, Expression r) =>
21 new BinaryOperator(l, op, r); 21 new BinaryOperator(l, op, r);
22 Getter getter(Expression e, String m) => new Getter(e, m); 22 Getter getter(Expression e, String m) => new Getter(e, m);
23 Index index(Expression e, Expression a) => new Index(e, a); 23 Index index(Expression e, Expression a) => new Index(e, a);
24 Invoke invoke(Expression e, String m, List<Expression> a) => 24 Invoke invoke(Expression e, String m, List<Expression> a) =>
25 new Invoke(e, m, a); 25 new Invoke(e, m, a);
26 InExpression inExpr(Expression l, Expression r) => new InExpression(l, r); 26 InExpression inExpr(Expression l, Expression r) => new InExpression(l, r);
27 AsExpression asExpr(Expression l, Expression r) => new AsExpression(l, r);
27 TernaryOperator ternary(Expression c, Expression t, Expression f) => 28 TernaryOperator ternary(Expression c, Expression t, Expression f) =>
28 new TernaryOperator(c, t, f); 29 new TernaryOperator(c, t, f);
29 30
30 class AstFactory { 31 class AstFactory {
31 EmptyExpression empty() => const EmptyExpression(); 32 EmptyExpression empty() => const EmptyExpression();
32 33
33 Literal literal(v) => new Literal(v); 34 Literal literal(v) => new Literal(v);
34 35
35 MapLiteral mapLiteral(List<MapLiteralEntry> entries) => 36 MapLiteral mapLiteral(List<MapLiteralEntry> entries) =>
36 new MapLiteral(entries); 37 new MapLiteral(entries);
(...skipping 15 matching lines...) Expand all
52 new TernaryOperator(c, t, f); 53 new TernaryOperator(c, t, f);
53 54
54 Getter getter(Expression g, String n) => new Getter(g, n); 55 Getter getter(Expression g, String n) => new Getter(g, n);
55 56
56 Index index(Expression e, Expression a) => new Index(e, a); 57 Index index(Expression e, Expression a) => new Index(e, a);
57 58
58 Invoke invoke(Expression e, String m, List<Expression> a) => 59 Invoke invoke(Expression e, String m, List<Expression> a) =>
59 new Invoke(e, m, a); 60 new Invoke(e, m, a);
60 61
61 InExpression inExpr(Expression l, Expression r) => new InExpression(l, r); 62 InExpression inExpr(Expression l, Expression r) => new InExpression(l, r);
63
64 AsExpression asExpr(Expression l, Expression r) => new AsExpression(l, r);
62 } 65 }
63 66
64 /// Base class for all expressions 67 /// Base class for all expressions
65 abstract class Expression { 68 abstract class Expression {
66 const Expression(); 69 const Expression();
67 accept(Visitor v); 70 accept(Visitor v);
68 } 71 }
69 72
70 class EmptyExpression extends Expression { 73 class EmptyExpression extends Expression {
71 const EmptyExpression(); 74 const EmptyExpression();
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 accept(Visitor v) => v.visitInExpression(this); 224 accept(Visitor v) => v.visitInExpression(this);
222 225
223 String toString() => '($left in $right)'; 226 String toString() => '($left in $right)';
224 227
225 bool operator ==(o) => o is InExpression && o.left == left 228 bool operator ==(o) => o is InExpression && o.left == left
226 && o.right == right; 229 && o.right == right;
227 230
228 int get hashCode => _JenkinsSmiHash.hash2(left.hashCode, right.hashCode); 231 int get hashCode => _JenkinsSmiHash.hash2(left.hashCode, right.hashCode);
229 } 232 }
230 233
234 class AsExpression extends Expression {
235 final Expression left;
236 final Expression right;
237
238 AsExpression(this.left, this.right);
239
240 accept(Visitor v) => v.visitAsExpression(this);
241
242 String toString() => '($left as $right)';
243
244 bool operator ==(o) => o is AsExpression && o.left == left
245 && o.right == right;
246
247 int get hashCode => _JenkinsSmiHash.hash2(left.hashCode, right.hashCode);
248 }
249
231 class Index extends Expression { 250 class Index extends Expression {
232 final Expression receiver; 251 final Expression receiver;
233 final Expression argument; 252 final Expression argument;
234 253
235 Index(this.receiver, this.argument); 254 Index(this.receiver, this.argument);
236 255
237 accept(Visitor v) => v.visitIndex(this); 256 accept(Visitor v) => v.visitIndex(this);
238 257
239 String toString() => '$receiver[$argument]'; 258 String toString() => '$receiver[$argument]';
240 259
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 } 346 }
328 347
329 static int hash2(int a, int b) => finish(combine(combine(0, a), b)); 348 static int hash2(int a, int b) => finish(combine(combine(0, a), b));
330 349
331 static int hash3(int a, int b, int c) => 350 static int hash3(int a, int b, int c) =>
332 finish(combine(combine(combine(0, a), b), c)); 351 finish(combine(combine(combine(0, a), b), c));
333 352
334 static int hash4(int a, int b, int c, int d) => 353 static int hash4(int a, int b, int c, int d) =>
335 finish(combine(combine(combine(combine(0, a), b), c), d)); 354 finish(combine(combine(combine(combine(0, a), b), c), d));
336 } 355 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698