@@ -112,7 +112,6 @@ var OPERATORS = extend(createMap(), {
112
112
'/' :function ( self , locals , a , b ) { return a ( self , locals ) / b ( self , locals ) ; } ,
113
113
'%' :function ( self , locals , a , b ) { return a ( self , locals ) % b ( self , locals ) ; } ,
114
114
'^' :function ( self , locals , a , b ) { return a ( self , locals ) ^ b ( self , locals ) ; } ,
115
- '=' :noop ,
116
115
'===' :function ( self , locals , a , b ) { return a ( self , locals ) === b ( self , locals ) ; } ,
117
116
'!==' :function ( self , locals , a , b ) { return a ( self , locals ) !== b ( self , locals ) ; } ,
118
117
'==' :function ( self , locals , a , b ) { return a ( self , locals ) == b ( self , locals ) ; } ,
@@ -125,8 +124,11 @@ var OPERATORS = extend(createMap(), {
125
124
'||' :function ( self , locals , a , b ) { return a ( self , locals ) || b ( self , locals ) ; } ,
126
125
'&' :function ( self , locals , a , b ) { return a ( self , locals ) & b ( self , locals ) ; } ,
127
126
// '|':function(self, locals, a,b){return a|b;},
128
- '|' :function ( self , locals , a , b ) { return b ( self , locals ) ( self , locals , a ( self , locals ) ) ; } ,
129
- '!' :function ( self , locals , a ) { return ! a ( self , locals ) ; }
127
+ '!' :function ( self , locals , a ) { return ! a ( self , locals ) ; } ,
128
+
129
+ //Tokenized as operators but parsed as assignment/filters
130
+ '=' :true ,
131
+ '|' :true
130
132
} ) ;
131
133
/* jshint bitwise: true */
132
134
var ESCAPE = { "n" :"\n" , "f" :"\f" , "r" :"\r" , "t" :"\t" , "v" :"\v" , "'" :"'" , '"' :'"' } ;
@@ -537,12 +539,12 @@ Parser.prototype = {
537
539
var left = this . expression ( ) ;
538
540
var token ;
539
541
while ( ( token = this . expect ( '|' ) ) ) {
540
- left = this . binaryFn ( left , token . fn , this . filter ( ) ) ;
542
+ left = this . filter ( left ) ;
541
543
}
542
544
return left ;
543
545
} ,
544
546
545
- filter : function ( ) {
547
+ filter : function ( inputFn ) {
546
548
var token = this . expect ( ) ;
547
549
var fn = this . $filter ( token . text ) ;
548
550
var argsFn ;
@@ -556,7 +558,8 @@ Parser.prototype = {
556
558
}
557
559
}
558
560
559
- return valueFn ( function $parseFilter ( self , locals , input ) {
561
+ return function $parseFilter ( self , locals ) {
562
+ var input = inputFn ( self , locals ) ;
560
563
if ( args ) {
561
564
args [ 0 ] = input ;
562
565
@@ -569,7 +572,7 @@ Parser.prototype = {
569
572
}
570
573
571
574
return fn ( input ) ;
572
- } ) ;
575
+ } ;
573
576
} ,
574
577
575
578
expression : function ( ) {
@@ -786,19 +789,19 @@ Parser.prototype = {
786
789
} ,
787
790
788
791
object : function ( ) {
789
- var keyValues = [ ] ;
792
+ var keys = [ ] , values = [ ] ;
790
793
var allConstant = true ;
791
794
if ( this . peekToken ( ) . text !== '}' ) {
792
795
do {
793
796
if ( this . peek ( '}' ) ) {
794
797
// Support trailing commas per ES5.1.
795
798
break ;
796
799
}
797
- var token = this . expect ( ) ,
798
- key = token . string || token . text ;
800
+ var token = this . expect ( ) ;
801
+ keys . push ( token . string || token . text ) ;
799
802
this . consume ( ':' ) ;
800
803
var value = this . expression ( ) ;
801
- keyValues . push ( { key : key , value : value } ) ;
804
+ values . push ( value ) ;
802
805
if ( ! value . constant ) {
803
806
allConstant = false ;
804
807
}
@@ -808,9 +811,8 @@ Parser.prototype = {
808
811
809
812
return extend ( function $parseObjectLiteral ( self , locals ) {
810
813
var object = { } ;
811
- for ( var i = 0 , ii = keyValues . length ; i < ii ; i ++ ) {
812
- var keyValue = keyValues [ i ] ;
813
- object [ keyValue . key ] = keyValue . value ( self , locals ) ;
814
+ for ( var i = 0 , ii = values . length ; i < ii ; i ++ ) {
815
+ object [ keys [ i ] ] = values [ i ] ( self , locals ) ;
814
816
}
815
817
return object ;
816
818
} , {
0 commit comments