From 6e420ff28d9b3e76ac2c3598bf3797540ef8a1d3 Mon Sep 17 00:00:00 2001 From: Tero Parviainen Date: Tue, 1 Apr 2014 06:53:35 +0300 Subject: [PATCH] fix($parse): mark constant unary minus expressions as constant Previously, constant numbers with a unary minus sign were not treated as constants. This fix corrects this behaviour, and may provide a small performance boost for certain applications, due to constant watches being automatically unregistered after their first listener call. Closes #6932 --- src/ng/parse.js | 6 +++++- test/ng/parseSpec.js | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ng/parse.js b/src/ng/parse.js index 885dc50afab9..50da14fa0770 100644 --- a/src/ng/parse.js +++ b/src/ng/parse.js @@ -393,7 +393,11 @@ var Parser = function (lexer, $filter, options) { this.options = options; }; -Parser.ZERO = function () { return 0; }; +Parser.ZERO = extend(function () { + return 0; +}, { + constant: true +}); Parser.prototype = { constructor: Parser, diff --git a/test/ng/parseSpec.js b/test/ng/parseSpec.js index 6a6bb4a1182d..a76fa86b6de4 100644 --- a/test/ng/parseSpec.js +++ b/test/ng/parseSpec.js @@ -1031,6 +1031,7 @@ describe('parser', function() { it('should mark complex expressions involving constant values as constant', inject(function($parse) { expect($parse('!true').constant).toBe(true); + expect($parse('-42').constant).toBe(true); expect($parse('1 - 1').constant).toBe(true); expect($parse('"foo" + "bar"').constant).toBe(true); expect($parse('5 != null').constant).toBe(true);