aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-04-03 23:17:47 +0800
committerGitHub <noreply@github.com>2017-04-03 23:17:47 +0800
commit48b3fe99524e1e85edd30f0a326c2f1136e150e4 (patch)
tree3f8773331d9718ee579383de08f7a56d688625b3
parenta4007418683f55fec52b8085bac5e4d545b70a0e (diff)
downloadtracifyjs-48b3fe99524e1e85edd30f0a326c2f1136e150e4.tar.gz
tracifyjs-48b3fe99524e1e85edd30f0a326c2f1136e150e4.zip
fix `mangleProperties` on identifiers (#1776)
- fix handling of "-Infinity" - add test case for "-0" reverts #1481
-rw-r--r--lib/propmangle.js2
-rw-r--r--test/compress/issue-1770.js148
2 files changed, 146 insertions, 4 deletions
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
+ };
+ }
}