Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 8b2c3b6

Browse files
committed
fix(filters): Fix filters in the code-gen parser
1 parent 4feddda commit 8b2c3b6

File tree

3 files changed

+10
-31
lines changed

3 files changed

+10
-31
lines changed

bin/parser_generator_for_spec.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ main(arguments) {
200200
'returnTrue() ? returnString() : returnInt()',
201201
'returnFalse() ? returnString() : returnInt()',
202202
'identity(returnFalse() ? returnString() : returnInt())',
203-
"taxRate ~/ 100 * subTotal"
203+
"taxRate ~/ 100 * subTotal",
204+
"'fOo'|uppercase|lowercase",
205+
"n = (name|lowercase)",
206+
"n",
207+
"1|nonexistent"
204208
]);
205209
}

lib/tools/parser_generator/dart_code_gen.dart

+5-25
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Code implements ParserAST {
1919

2020
get exp {
2121
if (_exp == null) {
22-
throw "Can not be used in an expression";
22+
throw "Can not be used in an expression: $id";
2323
}
2424
return _exp;
2525
}
@@ -58,29 +58,6 @@ class MultipleStatementCode extends Code {
5858
}
5959
}
6060

61-
class FilterCode extends Code {
62-
final String filterName;
63-
final Code leftHandSide;
64-
final List<Code> parameters;
65-
final Function evalError;
66-
67-
FilterCode(String this.filterName,
68-
Code this.leftHandSide,
69-
List<Code> this.parameters,
70-
Function this.evalError): super(null);
71-
72-
get id => '${leftHandSide.id} | $filterName:${parameters.map((e)=>e.id).join(':')}}';
73-
74-
Source toSource(SourceBuilder _) {
75-
var params = parameters.map((e) => _.ref(e));
76-
return _('new FilterExpression', _.parens(
77-
'filters(${_.str(filterName)})',
78-
_.ref(leftHandSide),
79-
'[${params.join(', ')}]'
80-
));
81-
}
82-
}
83-
8461
escape(String s) => s.replaceAll('\'', '\\\'').replaceAll(r'$', r'\$');
8562

8663
class GetterSetterGenerator {
@@ -314,6 +291,9 @@ class DartCodeGen implements ParserBackend {
314291
Code leftHandSide,
315292
List<Code> parameters,
316293
Function evalError) {
317-
return new FilterCode(filterName, leftHandSide, parameters, evalError);
294+
return new Code(
295+
'filters(\'${filterName}\')(${
296+
([leftHandSide]..addAll(parameters))
297+
.map((Code p) => p.exp).join(', ')})');
318298
}
319299
}

test/core/parser/parser_spec.dart

-5
Original file line numberDiff line numberDiff line change
@@ -821,11 +821,6 @@ main() {
821821
expect(eval("'fOo'|uppercase|lowercase")).toEqual("foo");
822822
});
823823

824-
it('Compiled filter should be instace of FilterExpression', () {
825-
var expression = parser("'Foo'|uppercase");
826-
expect(expression is FilterExpression).toEqual(true);
827-
});
828-
829824
it('should call a filter with arguments', () {
830825
expect(eval("1|increment:2")).toEqual(3);
831826
});

0 commit comments

Comments
 (0)