parent
2e3e41ba64
commit
afe0e45453
|
@ -281,6 +281,8 @@ export class Binary extends AST {
|
|||
case '%' : return left % right;
|
||||
case '==' : return left == right;
|
||||
case '!=' : return left != right;
|
||||
case '===' : return left === right;
|
||||
case '!==' : return left !== right;
|
||||
case '<' : return left < right;
|
||||
case '>' : return left > right;
|
||||
case '<=' : return left <= right;
|
||||
|
|
|
@ -304,7 +304,7 @@ class _Scanner {
|
|||
assert(this.peek == StringWrapper.charCodeAt(one, 0));
|
||||
this.advance();
|
||||
var str:string = one;
|
||||
if (this.peek == code) {
|
||||
while (this.peek == code) {
|
||||
this.advance();
|
||||
str += two;
|
||||
}
|
||||
|
@ -461,6 +461,8 @@ var OPERATORS = SetWrapper.createFromList([
|
|||
'=',
|
||||
'==',
|
||||
'!=',
|
||||
'===',
|
||||
'!==',
|
||||
'<',
|
||||
'>',
|
||||
'<=',
|
||||
|
|
|
@ -277,13 +277,17 @@ class _ParseAST {
|
|||
}
|
||||
|
||||
parseEquality() {
|
||||
// '==','!='
|
||||
// '==','!=','===','!=='
|
||||
var result = this.parseRelational();
|
||||
while (true) {
|
||||
if (this.optionalOperator('==')) {
|
||||
result = new Binary('==', result, this.parseRelational());
|
||||
} else if (this.optionalOperator('===')) {
|
||||
result = new Binary('===', result, this.parseRelational());
|
||||
} else if (this.optionalOperator('!=')) {
|
||||
result = new Binary('!=', result, this.parseRelational());
|
||||
} else if (this.optionalOperator('!==')) {
|
||||
result = new Binary('!==', result, this.parseRelational());
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import {describe, it, expect} from 'angular2/test_lib';
|
||||
import {ddescribe, describe, it, expect} from 'angular2/test_lib';
|
||||
|
||||
import {Lexer, Token} from 'angular2/src/change_detection/parser/lexer';
|
||||
|
||||
|
@ -150,7 +150,7 @@ export function main() {
|
|||
});
|
||||
|
||||
it('should tokenize relation', function() {
|
||||
var tokens:List<Token> = lex("! == != < > <= >=");
|
||||
var tokens:List<Token> = lex("! == != < > <= >= === !==");
|
||||
expectOperatorToken(tokens[0], 0, '!');
|
||||
expectOperatorToken(tokens[1], 2, '==');
|
||||
expectOperatorToken(tokens[2], 5, '!=');
|
||||
|
@ -158,6 +158,8 @@ export function main() {
|
|||
expectOperatorToken(tokens[4], 10, '>');
|
||||
expectOperatorToken(tokens[5], 12, '<=');
|
||||
expectOperatorToken(tokens[6], 15, '>=');
|
||||
expectOperatorToken(tokens[7], 18, '===');
|
||||
expectOperatorToken(tokens[8], 22, '!==');
|
||||
});
|
||||
|
||||
it('should tokenize statements', function() {
|
||||
|
|
|
@ -104,6 +104,7 @@ export function main() {
|
|||
it('should parse unary ! expressions', () => {
|
||||
expectEval("!true").toEqual(!true);
|
||||
expectEval("!!true").toEqual(!!true);
|
||||
expectEval("!!!true").toEqual(!!!true);
|
||||
});
|
||||
|
||||
it('should parse multiplicative expressions', () => {
|
||||
|
@ -123,7 +124,23 @@ export function main() {
|
|||
|
||||
it('should parse equality expressions', () => {
|
||||
expectEval("2==3").toEqual(2 == 3);
|
||||
expectEval("2=='2'").toEqual(2 == '2');
|
||||
expectEval("2=='3'").toEqual(2 == '3');
|
||||
expectEval("2!=3").toEqual(2 != 3);
|
||||
expectEval("2!='3'").toEqual(2 != '3');
|
||||
expectEval("2!='2'").toEqual(2 != '2');
|
||||
expectEval("2!=!false").toEqual(2!=!false);
|
||||
});
|
||||
|
||||
it('should parse strict equality expressions', () => {
|
||||
expectEval("2===3").toEqual(2 === 3);
|
||||
expectEval("2==='3'").toEqual(2 === '3');
|
||||
expectEval("2==='2'").toEqual(2 === '2');
|
||||
expectEval("2!==3").toEqual(2 !== 3);
|
||||
expectEval("2!=='3'").toEqual(2 !== '3');
|
||||
expectEval("2!=='2'").toEqual(2 !== '2');
|
||||
expectEval("false===!true").toEqual(false===!true);
|
||||
expectEval("false!==!!true").toEqual(false!==!!true);
|
||||
});
|
||||
|
||||
it('should parse logicalAND expressions', () => {
|
||||
|
@ -608,4 +625,4 @@ export function main() {
|
|||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue