fix non-string property key

avoid unused variable
This commit is contained in:
alexlamsl 2017-10-25 02:33:45 +08:00
parent 1282206db3
commit 1eea65e82e
2 changed files with 73 additions and 5 deletions

View File

@ -2693,7 +2693,10 @@ merge(Compressor.prototype, {
self.enclosed.forEach(function(def) { self.enclosed.forEach(function(def) {
var_names[def.name] = true; var_names[def.name] = true;
}); });
var tt = new TreeTransformer(function(node) { self.variables.each(function(def, name) {
var_names[name] = true;
});
return self.transform(new TreeTransformer(function(node) {
if (node instanceof AST_VarDef) { if (node instanceof AST_VarDef) {
var sym = node.name, def, value; var sym = node.name, def, value;
if (sym.scope === self if (sym.scope === self
@ -2731,7 +2734,7 @@ merge(Compressor.prototype, {
} }
function make_sym(key) { function make_sym(key) {
var prefix = sym.name + "_" + key.replace(/[^a-z_$]+/ig, "_"); var prefix = sym.name + "_" + key.toString().replace(/[^a-z_$]+/ig, "_");
var name = prefix; var name = prefix;
for (var i = 0; var_names[name]; i++) name = prefix + "$" + i; for (var i = 0; var_names[name]; i++) name = prefix + "$" + i;
var new_var = make_node(sym.CTOR, sym, { var new_var = make_node(sym.CTOR, sym, {
@ -2744,8 +2747,7 @@ merge(Compressor.prototype, {
var_names[name] = true; var_names[name] = true;
return new_var; return new_var;
} }
}); }));
return self.transform(tt);
}); });
// drop_side_effect_free() // drop_side_effect_free()

View File

@ -184,7 +184,7 @@ single_use: {
} }
} }
name_collision: { name_collision_1: {
options = { options = {
reduce_vars: true, reduce_vars: true,
hoist_props: true, hoist_props: true,
@ -220,3 +220,69 @@ name_collision: {
} }
expect_stdout: "1 3 4 5 6 7" expect_stdout: "1 3 4 5 6 7"
} }
name_collision_2: {
options = {
reduce_vars: true,
hoist_props: true,
toplevel: true,
}
input: {
var o = {
p: 1,
0: function(x) {
return x;
},
1: function(x) {
return x + 1;
}
}, o__$0 = 2, o__$1 = 3;
console.log(o.p === o.p, o[0](4), o[1](5), o__$0, o__$1);
}
expect: {
var o_p = 1,
o__ = function(x) {
return x;
},
o__$2 = function(x) {
return x + 1;
},
o__$0 = 2,
o__$1 = 3;
console.log(o_p === o_p, o__(4), o__$2(5), o__$0, o__$1);
}
expect_stdout: "true 4 6 2 3"
}
name_collision_3: {
options = {
reduce_vars: true,
hoist_props: true,
toplevel: true,
}
input: {
var o = {
p: 1,
0: function(x) {
return x;
},
1: function(x) {
return x + 1;
}
}, o__$0 = 2, o__$1 = 3;
console.log(o.p === o.p, o[0](4), o[1](5));
}
expect: {
var o_p = 1,
o__ = function(x) {
return x;
},
o__$2 = function(x) {
return x + 1;
},
o__$0 = 2,
o__$1 = 3;
console.log(o_p === o_p, o__(4), o__$2(5));
}
expect_stdout: "true 4 6"
}