OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 library polymer_expressions.visitor; | |
6 | |
7 import 'expression.dart'; | |
8 | |
9 abstract class Visitor { | |
10 visit(Expression s) => s.accept(this); | |
11 visitEmptyExpression(EmptyExpression e); | |
12 visitParenthesizedExpression(ParenthesizedExpression e); | |
13 visitGetter(Getter i); | |
14 visitIndex(Index i); | |
15 visitInvoke(Invoke i); | |
16 visitLiteral(Literal l); | |
17 visitListLiteral(ListLiteral l); | |
18 visitMapLiteral(MapLiteral l); | |
19 visitMapLiteralEntry(MapLiteralEntry l); | |
20 visitIdentifier(Identifier i); | |
21 visitBinaryOperator(BinaryOperator o); | |
22 visitUnaryOperator(UnaryOperator o); | |
23 visitTernaryOperator(TernaryOperator o); | |
24 visitInExpression(InExpression c); | |
25 visitAsExpression(AsExpression c); | |
26 } | |
27 | |
28 class RecursiveVisitor extends Visitor { | |
29 preVisitExpression(Expression e) {} | |
30 visitExpression(Expression e) {} | |
31 | |
32 visitEmptyExpression(EmptyExpression e) { | |
33 preVisitExpression(e); | |
34 visitExpression(e); | |
35 } | |
36 | |
37 visitParenthesizedExpression(ParenthesizedExpression e) { | |
38 preVisitExpression(e); | |
39 visit(e.child); | |
40 visitExpression(e); | |
41 } | |
42 | |
43 visitGetter(Getter i) { | |
44 preVisitExpression(i); | |
45 visit(i.receiver); | |
46 visitExpression(i); | |
47 } | |
48 | |
49 visitIndex(Index i) { | |
50 preVisitExpression(i); | |
51 visit(i.receiver); | |
52 visit(i.argument); | |
53 visitExpression(i); | |
54 } | |
55 | |
56 visitInvoke(Invoke i) { | |
57 preVisitExpression(i); | |
58 visit(i.receiver); | |
59 if (i.arguments != null) { | |
60 for (var a in i.arguments) { | |
61 visit(a); | |
62 } | |
63 } | |
64 visitExpression(i); | |
65 } | |
66 | |
67 visitLiteral(Literal l) { | |
68 preVisitExpression(l); | |
69 visitExpression(l); | |
70 } | |
71 | |
72 visitListLiteral(ListLiteral l) { | |
73 preVisitExpression(l); | |
74 for (var i in l.items) { | |
75 visit(i); | |
76 } | |
77 visitExpression(l); | |
78 } | |
79 | |
80 visitMapLiteral(MapLiteral l) { | |
81 preVisitExpression(l); | |
82 for (var e in l.entries) { | |
83 visit(e); | |
84 } | |
85 visitExpression(l); | |
86 } | |
87 | |
88 visitMapLiteralEntry(MapLiteralEntry e) { | |
89 preVisitExpression(e); | |
90 visit(e.key); | |
91 visit(e.entryValue); | |
92 visitExpression(e); | |
93 } | |
94 | |
95 visitIdentifier(Identifier i) { | |
96 preVisitExpression(i); | |
97 visitExpression(i); | |
98 } | |
99 | |
100 visitBinaryOperator(BinaryOperator o) { | |
101 preVisitExpression(o); | |
102 visit(o.left); | |
103 visit(o.right); | |
104 visitExpression(o); | |
105 } | |
106 | |
107 visitUnaryOperator(UnaryOperator o) { | |
108 preVisitExpression(o); | |
109 visit(o.child); | |
110 visitExpression(o); | |
111 } | |
112 | |
113 visitTernaryOperator(TernaryOperator o) { | |
114 preVisitExpression(o); | |
115 visit(o.condition); | |
116 visit(o.trueExpr); | |
117 visit(o.falseExpr); | |
118 visitExpression(o); | |
119 } | |
120 | |
121 visitInExpression(InExpression c) { | |
122 preVisitExpression(c); | |
123 visit(c.left); | |
124 visit(c.right); | |
125 visitExpression(c); | |
126 } | |
127 | |
128 visitAsExpression(AsExpression c) { | |
129 visit(c.left); | |
130 visit(c.right); | |
131 visitExpression(c); | |
132 } | |
133 } | |
OLD | NEW |