@@ -30,6 +30,7 @@ export class ImplicitReceiver extends AST {
3030}
3131
3232export class Chain extends AST {
33+ @FIELD ( 'final expressions:List' )
3334 constructor ( expressions :List ) {
3435 this . expressions = expressions ;
3536 }
@@ -42,8 +43,11 @@ export class Chain extends AST {
4243 }
4344 return result ;
4445 }
45- }
4646
47+ visit ( visitor ) {
48+ visitor . visitChain ( this ) ;
49+ }
50+ }
4751
4852export class Conditional extends AST {
4953 @FIELD ( 'final condition:AST' )
@@ -62,9 +66,13 @@ export class Conditional extends AST {
6266 return this . falseExp . eval ( context ) ;
6367 }
6468 }
69+
70+ visit ( visitor ) {
71+ visitor . visitConditional ( this ) ;
72+ }
6573}
6674
67- export class FieldRead extends AST {
75+ export class AccessMember extends AST {
6876 @FIELD ( 'final receiver:AST' )
6977 @FIELD ( 'final name:string' )
7078 @FIELD ( 'final getter:Function' )
@@ -89,15 +97,18 @@ export class FieldRead extends AST {
8997 }
9098
9199 visit ( visitor ) {
92- visitor . visitFieldRead ( this ) ;
100+ visitor . visitAccessMember ( this ) ;
93101 }
94102}
95103
96104export class KeyedAccess extends AST {
105+ @FIELD ( 'final obj:AST' )
106+ @FIELD ( 'final key:AST' )
97107 constructor ( obj :AST , key :AST ) {
98108 this . obj = obj ;
99109 this . key = key ;
100110 }
111+
101112 eval ( context ) {
102113 var obj = this . obj . eval ( context ) ;
103114 var key = this . key . eval ( context ) ;
@@ -129,6 +140,9 @@ export class KeyedAccess extends AST {
129140 return value ;
130141 }
131142
143+ visit ( visitor ) {
144+ visitor . visitKeyedAccess ( this ) ;
145+ }
132146}
133147
134148export class Formatter extends AST {
@@ -152,9 +166,11 @@ export class LiteralPrimitive extends AST {
152166 constructor ( value ) {
153167 this . value = value ;
154168 }
169+
155170 eval ( context ) {
156171 return this . value ;
157172 }
173+
158174 visit ( visitor ) {
159175 visitor . visitLiteralPrimitive ( this ) ;
160176 }
@@ -165,9 +181,11 @@ export class LiteralArray extends AST {
165181 constructor ( expressions :List ) {
166182 this . expressions = expressions ;
167183 }
184+
168185 eval ( context ) {
169186 return ListWrapper . map ( this . expressions , ( e ) => e . eval ( context ) ) ;
170187 }
188+
171189 visit ( visitor ) {
172190 visitor . visitLiteralArray ( this ) ;
173191 }
@@ -188,6 +206,10 @@ export class LiteralMap extends AST {
188206 }
189207 return res ;
190208 }
209+
210+ visit ( visitor ) {
211+ visitor . visitLiteralMap ( this ) ;
212+ }
191213}
192214
193215export class Binary extends AST {
@@ -200,10 +222,6 @@ export class Binary extends AST {
200222 this . right = right ;
201223 }
202224
203- visit ( visitor ) {
204- visitor . visitBinary ( this ) ;
205- }
206-
207225 eval ( context ) {
208226 var left = this . left . eval ( context ) ;
209227 switch ( this . operation ) {
@@ -234,6 +252,10 @@ export class Binary extends AST {
234252 }
235253 throw 'Internal error [$operation] not handled' ;
236254 }
255+
256+ visit ( visitor ) {
257+ visitor . visitBinary ( this ) ;
258+ }
237259}
238260
239261export class PrefixNot extends AST {
@@ -242,10 +264,14 @@ export class PrefixNot extends AST {
242264 constructor ( expression :AST ) {
243265 this . expression = expression ;
244266 }
245- visit ( visitor ) { visitor . visitPrefixNot ( this ) ; }
267+
246268 eval ( context ) {
247269 return ! toBool ( this . expression . eval ( context ) ) ;
248270 }
271+
272+ visit ( visitor ) {
273+ visitor . visitPrefixNot ( this ) ;
274+ }
249275}
250276
251277export class Assignment extends AST {
@@ -255,11 +281,14 @@ export class Assignment extends AST {
255281 this . target = target ;
256282 this . value = value ;
257283 }
258- visit ( visitor ) { visitor . visitAssignment ( this ) ; }
259284
260285 eval ( context ) {
261286 return this . target . assign ( context , this . value . eval ( context ) ) ;
262287 }
288+
289+ visit ( visitor ) {
290+ visitor . visitAssignment ( this ) ;
291+ }
263292}
264293
265294export class MethodCall extends AST {
@@ -276,6 +305,10 @@ export class MethodCall extends AST {
276305 var obj = this . receiver . eval ( context ) ;
277306 return this . fn ( obj , evalList ( context , this . args ) ) ;
278307 }
308+
309+ visit ( visitor ) {
310+ visitor . visitMethodCall ( this ) ;
311+ }
279312}
280313
281314export class FunctionCall extends AST {
@@ -292,18 +325,28 @@ export class FunctionCall extends AST {
292325 var obj = this . target . eval ( context ) ;
293326 return FunctionWrapper . apply ( obj , evalList ( context , this . args ) ) ;
294327 }
328+
329+ visit ( visitor ) {
330+ visitor . visitFunctionCall ( this ) ;
331+ }
295332}
296333
297334//INTERFACE
298335export class AstVisitor {
336+ visitChain ( ast :Chain ) { }
299337 visitImplicitReceiver ( ast :ImplicitReceiver ) { }
300- visitFieldRead ( ast :FieldRead ) { }
338+ visitConditional ( ast :Conditional ) { }
339+ visitAccessMember ( ast :AccessMember ) { }
340+ visitKeyedAccess ( ast :KeyedAccess ) { }
301341 visitBinary ( ast :Binary ) { }
302342 visitPrefixNot ( ast :PrefixNot ) { }
303343 visitLiteralPrimitive ( ast :LiteralPrimitive ) { }
304344 visitFormatter ( ast :Formatter ) { }
305345 visitAssignment ( ast :Assignment ) { }
306346 visitLiteralArray ( ast :LiteralArray ) { }
347+ visitLiteralMap ( ast :LiteralMap ) { }
348+ visitMethodCall ( ast :MethodCall ) { }
349+ visitFunctionCall ( ast :FunctionCall ) { }
307350}
308351
309352var _evalListCache = [ [ ] , [ 0 ] , [ 0 , 0 ] , [ 0 , 0 , 0 ] , [ 0 , 0 , 0 , 0 ] , [ 0 , 0 , 0 , 0 , 0 ] ] ;
0 commit comments