Skip to content

Commit 693489c

Browse files
committed
refactor(Parser): cleanup
1 parent 7b777b1 commit 693489c

File tree

5 files changed

+64
-21
lines changed

5 files changed

+64
-21
lines changed

modules/change_detection/src/parser/ast.js

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export class ImplicitReceiver extends AST {
3030
}
3131

3232
export 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

4852
export 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

96104
export 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

134148
export 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

193215
export 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

239261
export 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

251277
export 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

265294
export 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

281314
export 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
298335
export 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

309352
var _evalListCache = [[],[0],[0,0],[0,0,0],[0,0,0,0],[0,0,0,0,0]];

modules/change_detection/src/parser/parser.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {ClosureMap} from './closure_map';
66
import {
77
AST,
88
ImplicitReceiver,
9-
FieldRead,
9+
AccessMember,
1010
LiteralPrimitive,
1111
Expression,
1212
Binary,
@@ -284,7 +284,7 @@ class _ParseAST {
284284
var result = this.parsePrimary();
285285
while (true) {
286286
if (this.optionalCharacter($PERIOD)) {
287-
result = this.parseAccessorOrMethodCall(result);
287+
result = this.parseAccessMemberOrMethodCall(result);
288288

289289
} else if (this.optionalCharacter($LBRACKET)) {
290290
var key = this.parseExpression();
@@ -324,7 +324,7 @@ class _ParseAST {
324324
return this.parseLiteralMap();
325325

326326
} else if (this.next.isIdentifier()) {
327-
return this.parseAccessorOrMethodCall(_implicitReceiver);
327+
return this.parseAccessMemberOrMethodCall(_implicitReceiver);
328328

329329
} else if (this.next.isNumber()) {
330330
var value = this.next.toNumber();
@@ -370,7 +370,7 @@ class _ParseAST {
370370
return new LiteralMap(keys, values);
371371
}
372372

373-
parseAccessorOrMethodCall(receiver):AST {
373+
parseAccessMemberOrMethodCall(receiver):AST {
374374
var id = this.expectIdentifierOrKeyword();
375375

376376
if (this.optionalCharacter($LPAREN)) {
@@ -382,7 +382,7 @@ class _ParseAST {
382382
} else {
383383
var getter = this.closureMap.getter(id);
384384
var setter = this.closureMap.setter(id);
385-
return new FieldRead(receiver, id, getter, setter);
385+
return new AccessMember(receiver, id, getter, setter);
386386
}
387387
}
388388

modules/change_detection/src/watch_group.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {ProtoRecord, Record} from './record';
22
import {FIELD, IMPLEMENTS, isBlank, isPresent} from 'facade/lang';
3-
import {AST, FieldRead, ImplicitReceiver, AstVisitor} from './parser/ast';
3+
import {AST, AccessMember, ImplicitReceiver, AstVisitor} from './parser/ast';
44

55
export class ProtoWatchGroup {
66
@FIELD('headRecord:ProtoRecord')
@@ -126,7 +126,7 @@ class ProtoRecordCreator {
126126
//do nothing
127127
}
128128

129-
visitFieldRead(ast:FieldRead) {
129+
visitAccessMember(ast:AccessMember) {
130130
ast.receiver.visit(this);
131131
this.add(new ProtoRecord(this.protoWatchGroup, ast.name, null));
132132
}

modules/change_detection/test/change_detector_spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {describe, it, xit, expect} from 'test_lib/test_lib';
22

33
import {List, ListWrapper} from 'facade/collection';
4-
import {ImplicitReceiver, FieldRead} from 'change_detection/parser/ast';
4+
import {ImplicitReceiver, AccessMember} from 'change_detection/parser/ast';
55
import {ClosureMap} from 'change_detection/parser/closure_map';
66

77
import {
@@ -19,7 +19,7 @@ export function main() {
1919
var parts = exp.split(".");
2020
var cm = new ClosureMap();
2121
return ListWrapper.reduce(parts, function (ast, fieldName) {
22-
return new FieldRead(ast, fieldName, cm.getter(fieldName), cm.setter(fieldName));
22+
return new AccessMember(ast, fieldName, cm.getter(fieldName), cm.setter(fieldName));
2323
}, new ImplicitReceiver());
2424
}
2525

modules/core/test/compiler/view_spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {ProtoWatchGroup} from 'change_detection/watch_group';
66
import {ChangeDetector} from 'change_detection/change_detector';
77
import {DOM, Element} from 'facade/dom';
88
import {FIELD} from 'facade/lang';
9-
import {ImplicitReceiver, FieldRead} from 'change_detection/parser/ast';
9+
import {ImplicitReceiver, AccessMember} from 'change_detection/parser/ast';
1010
import {ClosureMap} from 'change_detection/parser/closure_map';
1111
import {ElementBinder} from 'core/compiler/element_binder';
1212

@@ -20,7 +20,7 @@ class Directive {
2020
export function main() {
2121
var oneFieldAst = (fieldName) => {
2222
var cm = new ClosureMap();
23-
return new FieldRead(new ImplicitReceiver(), fieldName,
23+
return new AccessMember(new ImplicitReceiver(), fieldName,
2424
cm.getter(fieldName), cm.setter(fieldName));
2525
};
2626

0 commit comments

Comments
 (0)