From 72f8abd7b30290e58f6951a109009615e1e80445 Mon Sep 17 00:00:00 2001 From: Trotyl Date: Mon, 12 Feb 2018 00:02:24 +0800 Subject: [PATCH] fix(compiler): make unary plus operator consistent to JavaScript (#22154) fixes #22089 PR Close #22154 --- packages/compiler/src/expression_parser/parser.ts | 4 +++- packages/compiler/test/expression_parser/parser_spec.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/compiler/src/expression_parser/parser.ts b/packages/compiler/src/expression_parser/parser.ts index 93d2362a43..55d6b40514 100644 --- a/packages/compiler/src/expression_parser/parser.ts +++ b/packages/compiler/src/expression_parser/parser.ts @@ -477,7 +477,9 @@ export class _ParseAST { switch (operator) { case '+': this.advance(); - return this.parsePrefix(); + result = this.parsePrefix(); + return new Binary( + this.span(start), '-', result, new LiteralPrimitive(new ParseSpan(start, start), 0)); case '-': this.advance(); result = this.parsePrefix(); diff --git a/packages/compiler/test/expression_parser/parser_spec.ts b/packages/compiler/test/expression_parser/parser_spec.ts index 0d08b4b4a1..cdd38fb72f 100644 --- a/packages/compiler/test/expression_parser/parser_spec.ts +++ b/packages/compiler/test/expression_parser/parser_spec.ts @@ -103,7 +103,9 @@ import {validate} from './validator'; it('should parse unary - expressions', () => { checkAction('-1', '0 - 1'); - checkAction('+1', '1'); + checkAction('+1', '1 - 0'); + checkAction(`-'1'`, `0 - "1"`); + checkAction(`+'1'`, `"1" - 0`); }); it('should parse unary ! expressions', () => {