fix mangleProperties on identifiers (#1776)

- fix handling of "-Infinity"
- add test case for "-0"

reverts #1481
This commit is contained in:
Alex Lam S.L
2017-04-03 23:17:47 +08:00
committed by GitHub
parent a400741868
commit 48b3fe9952
2 changed files with 146 additions and 4 deletions

View File

@@ -47,6 +47,7 @@ function find_builtins() {
// NaN will be included due to Number.NaN // NaN will be included due to Number.NaN
var a = [ var a = [
"Infinity", "Infinity",
"-Infinity",
"undefined", "undefined",
]; ];
[ Object, Array, Function, Number, [ Object, Array, Function, Number,
@@ -153,7 +154,6 @@ function mangle_properties(ast, options) {
// only function declarations after this line // only function declarations after this line
function can_mangle(name) { function can_mangle(name) {
if (!is_identifier(name)) return false;
if (unmangleable.indexOf(name) >= 0) return false; if (unmangleable.indexOf(name) >= 0) return false;
if (reserved.indexOf(name) >= 0) return false; if (reserved.indexOf(name) >= 0) return false;
if (options.only_cache) { if (options.only_cache) {

View File

@@ -6,6 +6,7 @@ mangle_props: {
NaN: 2, NaN: 2,
Infinity: 3, Infinity: 3,
"-Infinity": 4, "-Infinity": 4,
"-0": 5,
}; };
console.log( console.log(
obj[void 0], obj[void 0],
@@ -19,7 +20,10 @@ mangle_props: {
obj["Infinity"], obj["Infinity"],
obj[-1/0], obj[-1/0],
obj[-Infinity], obj[-Infinity],
obj["-Infinity"] obj["-Infinity"],
obj[-0],
obj[-""],
obj["-0"]
); );
} }
expect: { expect: {
@@ -28,6 +32,7 @@ mangle_props: {
NaN: 2, NaN: 2,
Infinity: 3, Infinity: 3,
"-Infinity": 4, "-Infinity": 4,
a: 5,
}; };
console.log( console.log(
obj[void 0], obj[void 0],
@@ -41,8 +46,145 @@ mangle_props: {
obj["Infinity"], obj["Infinity"],
obj[-1/0], obj[-1/0],
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
};
}
} }