@@ -211,18 +211,11 @@ class _ParseAST {
211211
212212 parsePipe ( ) {
213213 var result = this . parseExpression ( ) ;
214- while ( this . optionalOperator ( "|" ) ) {
215- if ( this . parseAction ) {
216- this . error ( "Cannot have a pipe in an action expression" ) ;
217- }
218- var name = this . expectIdentifierOrKeyword ( ) ;
219- var args = ListWrapper . create ( ) ;
220- while ( this . optionalCharacter ( $COLON ) ) {
221- ListWrapper . push ( args , this . parseExpression ( ) ) ;
222- }
223- result = new Pipe ( result , name , args , true ) ;
214+ if ( this . optionalOperator ( "|" ) ) {
215+ return this . parseInlinedPipe ( result ) ;
216+ } else {
217+ return result ;
224218 }
225- return result ;
226219 }
227220
228221 parseExpression ( ) {
@@ -464,10 +457,32 @@ class _ParseAST {
464457 } else {
465458 var getter = this . reflector . getter ( id ) ;
466459 var setter = this . reflector . setter ( id ) ;
467- return new AccessMember ( receiver , id , getter , setter ) ;
460+ var am = new AccessMember ( receiver , id , getter , setter ) ;
461+
462+ if ( this . optionalOperator ( "|" ) ) {
463+ return this . parseInlinedPipe ( am ) ;
464+ } else {
465+ return am ;
466+ }
468467 }
469468 }
470469
470+ parseInlinedPipe ( result ) {
471+ do {
472+ if ( this . parseAction ) {
473+ this . error ( "Cannot have a pipe in an action expression" ) ;
474+ }
475+ var name = this . expectIdentifierOrKeyword ( ) ;
476+ var args = ListWrapper . create ( ) ;
477+ while ( this . optionalCharacter ( $COLON ) ) {
478+ ListWrapper . push ( args , this . parseExpression ( ) ) ;
479+ }
480+ result = new Pipe ( result , name , args , true ) ;
481+ } while ( this . optionalOperator ( "|" ) ) ;
482+
483+ return result ;
484+ }
485+
471486 parseCallArguments ( ) {
472487 if ( this . next . isCharacter ( $RPAREN ) ) return [ ] ;
473488 var positionals = [ ] ;
0 commit comments