@@ -20,6 +20,8 @@ var OPERATORS = {
20
20
'%' :function ( self , locals , a , b ) { return a ( self , locals ) % b ( self , locals ) ; } ,
21
21
'^' :function ( self , locals , a , b ) { return a ( self , locals ) ^ b ( self , locals ) ; } ,
22
22
'=' :noop ,
23
+ '===' :function ( self , locals , a , b ) { return a ( self , locals ) === b ( self , locals ) ; } ,
24
+ '!==' :function ( self , locals , a , b ) { return a ( self , locals ) !== b ( self , locals ) ; } ,
23
25
'==' :function ( self , locals , a , b ) { return a ( self , locals ) == b ( self , locals ) ; } ,
24
26
'!=' :function ( self , locals , a , b ) { return a ( self , locals ) != b ( self , locals ) ; } ,
25
27
'<' :function ( self , locals , a , b ) { return a ( self , locals ) < b ( self , locals ) ; } ,
@@ -70,9 +72,14 @@ function lex(text, csp){
70
72
continue ;
71
73
} else {
72
74
var ch2 = ch + peek ( ) ,
75
+ ch3 = ch2 + peek ( 2 ) ,
73
76
fn = OPERATORS [ ch ] ,
74
- fn2 = OPERATORS [ ch2 ] ;
75
- if ( fn2 ) {
77
+ fn2 = OPERATORS [ ch2 ] ,
78
+ fn3 = OPERATORS [ ch3 ] ;
79
+ if ( fn3 ) {
80
+ tokens . push ( { index :index , text :ch3 , fn :fn3 } ) ;
81
+ index += 3 ;
82
+ } else if ( fn2 ) {
76
83
tokens . push ( { index :index , text :ch2 , fn :fn2 } ) ;
77
84
index += 2 ;
78
85
} else if ( fn ) {
@@ -94,8 +101,9 @@ function lex(text, csp){
94
101
return chars . indexOf ( lastCh ) != - 1 ;
95
102
}
96
103
97
- function peek ( ) {
98
- return index + 1 < text . length ? text . charAt ( index + 1 ) : false ;
104
+ function peek ( i ) {
105
+ var num = i || 1 ;
106
+ return index + num < text . length ? text . charAt ( index + num ) : false ;
99
107
}
100
108
function isNumber ( ch ) {
101
109
return '0' <= ch && ch <= '9' ;
@@ -456,7 +464,7 @@ function parser(text, json, $filter, csp){
456
464
function equality ( ) {
457
465
var left = relational ( ) ;
458
466
var token ;
459
- if ( ( token = expect ( '==' , '!=' ) ) ) {
467
+ if ( ( token = expect ( '==' , '!=' , '===' , '!==' ) ) ) {
460
468
left = binaryFn ( left , token . fn , equality ( ) ) ;
461
469
}
462
470
return left ;
0 commit comments