diff options
| author | Jeremy Tymes | 2012-11-27 11:00:46 -0500 |
|---|---|---|
| committer | Misko Hevery | 2013-01-17 23:08:38 -0800 |
| commit | a179a9a96eda5c566bda8a70ac8a75822c936a68 (patch) | |
| tree | 42a1f70c0176a2957874a70781d64f268401240c /src/ng/parse.js | |
| parent | 610a5a0c14a71be6cd147c665f80478515bfb576 (diff) | |
| download | angular.js-a179a9a96eda5c566bda8a70ac8a75822c936a68.tar.bz2 | |
feat($parse): allow strict equality in angular expressions
Allows the parser to parse strict equality and inequality
in angular expressions.
Closes #908
Diffstat (limited to 'src/ng/parse.js')
| -rw-r--r-- | src/ng/parse.js | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/ng/parse.js b/src/ng/parse.js index 97aba113..5a70979a 100644 --- a/src/ng/parse.js +++ b/src/ng/parse.js @@ -20,6 +20,8 @@ var OPERATORS = { '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);}, '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);}, '=':noop, + '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);}, + '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);}, '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);}, '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);}, '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);}, @@ -70,9 +72,14 @@ function lex(text, csp){ continue; } else { var ch2 = ch + peek(), + ch3 = ch2 + peek(2), fn = OPERATORS[ch], - fn2 = OPERATORS[ch2]; - if (fn2) { + fn2 = OPERATORS[ch2], + fn3 = OPERATORS[ch3]; + if (fn3) { + tokens.push({index:index, text:ch3, fn:fn3}); + index += 3; + } else if (fn2) { tokens.push({index:index, text:ch2, fn:fn2}); index += 2; } else if (fn) { @@ -94,8 +101,9 @@ function lex(text, csp){ return chars.indexOf(lastCh) != -1; } - function peek() { - return index + 1 < text.length ? text.charAt(index + 1) : false; + function peek(i) { + var num = i || 1; + return index + num < text.length ? text.charAt(index + num) : false; } function isNumber(ch) { return '0' <= ch && ch <= '9'; @@ -456,7 +464,7 @@ function parser(text, json, $filter, csp){ function equality() { var left = relational(); var token; - if ((token = expect('==','!='))) { + if ((token = expect('==','!=','===','!=='))) { left = binaryFn(left, token.fn, equality()); } return left; |
