From: Alex Lam S.L Date: Mon, 3 Apr 2017 15:17:47 +0000 (+0800) Subject: fix `mangleProperties` on identifiers (#1776) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=48b3fe99524e1e85edd30f0a326c2f1136e150e4;p=UglifyJS.git fix `mangleProperties` on identifiers (#1776) - fix handling of "-Infinity" - add test case for "-0" reverts #1481 --- diff --git a/lib/propmangle.js b/lib/propmangle.js index c1e8c7e4..4e43bb63 100644 --- a/lib/propmangle.js +++ b/lib/propmangle.js @@ -47,6 +47,7 @@ function find_builtins() { // NaN will be included due to Number.NaN var a = [ "Infinity", + "-Infinity", "undefined", ]; [ Object, Array, Function, Number, @@ -153,7 +154,6 @@ function mangle_properties(ast, options) { // only function declarations after this line function can_mangle(name) { - if (!is_identifier(name)) return false; if (unmangleable.indexOf(name) >= 0) return false; if (reserved.indexOf(name) >= 0) return false; if (options.only_cache) { diff --git a/test/compress/issue-1770.js b/test/compress/issue-1770.js index 69df8960..9008c6f4 100644 --- a/test/compress/issue-1770.js +++ b/test/compress/issue-1770.js @@ -6,6 +6,7 @@ mangle_props: { NaN: 2, Infinity: 3, "-Infinity": 4, + "-0": 5, }; console.log( obj[void 0], @@ -19,7 +20,10 @@ mangle_props: { obj["Infinity"], obj[-1/0], obj[-Infinity], - obj["-Infinity"] + obj["-Infinity"], + obj[-0], + obj[-""], + obj["-0"] ); } expect: { @@ -28,6 +32,7 @@ mangle_props: { NaN: 2, Infinity: 3, "-Infinity": 4, + a: 5, }; console.log( obj[void 0], @@ -41,8 +46,145 @@ mangle_props: { obj["Infinity"], obj[-1/0], obj[-1/0], - obj["-Infinity"] + obj["-Infinity"], + obj[-0], + obj[-""], + obj["a"] ); } - expect_stdout: true + expect_stdout: "1 1 1 2 2 2 3 3 3 4 4 4 undefined undefined 5" +} + +identifier: { + mangle_props = {} + input: { + var obj = { + abstract: 1, + boolean: 2, + byte: 3, + char: 4, + class: 5, + double: 6, + enum: 7, + export: 8, + extends: 9, + final: 10, + float: 11, + goto: 12, + implements: 13, + import: 14, + int: 15, + interface: 16, + let: 17, + long: 18, + native: 19, + package: 20, + private: 21, + protected: 22, + public: 23, + short: 24, + static: 25, + super: 26, + synchronized: 27, + this: 28, + throws: 29, + transient: 30, + volatile: 31, + yield: 32, + false: 33, + null: 34, + true: 35, + break: 36, + case: 37, + catch: 38, + const: 39, + continue: 40, + debugger: 41, + default: 42, + delete: 43, + do: 44, + else: 45, + finally: 46, + for: 47, + function: 48, + if: 49, + in: 50, + instanceof: 51, + new: 52, + return: 53, + switch: 54, + throw: 55, + try: 56, + typeof: 57, + var: 58, + void: 59, + while: 60, + with: 61, + }; + } + expect: { + var obj = { + a: 1, + b: 2, + c: 3, + d: 4, + e: 5, + f: 6, + g: 7, + h: 8, + i: 9, + j: 10, + k: 11, + l: 12, + m: 13, + n: 14, + o: 15, + p: 16, + q: 17, + r: 18, + s: 19, + t: 20, + u: 21, + v: 22, + w: 23, + x: 24, + y: 25, + z: 26, + A: 27, + B: 28, + C: 29, + D: 30, + F: 31, + G: 32, + H: 33, + I: 34, + J: 35, + K: 36, + L: 37, + M: 38, + N: 39, + O: 40, + P: 41, + Q: 42, + R: 43, + S: 44, + T: 45, + U: 46, + V: 47, + W: 48, + X: 49, + Y: 50, + Z: 51, + $: 52, + _: 53, + aa: 54, + ba: 55, + ca: 56, + da: 57, + ea: 58, + fa: 59, + ga: 60, + ha: 61 + }; + } }