fix corner case with [].splice()

This commit is contained in:
alexlamsl 2017-05-04 14:09:06 +08:00
parent 1d24488655
commit f605e9efcf
2 changed files with 39 additions and 8 deletions

View File

@ -823,8 +823,7 @@ merge(Compressor.prototype, {
if (node === expr) { if (node === expr) {
found = true; found = true;
if (node instanceof AST_VarDef) { if (node instanceof AST_VarDef) {
var orig = node.name.definition().orig; remove(node.name.definition().orig, node.name);
orig.splice(orig.indexOf(node.name), 1);
} }
return in_list ? MAP.skip : null; return in_list ? MAP.skip : null;
} }
@ -2062,8 +2061,8 @@ merge(Compressor.prototype, {
var var_defs = var_defs_by_id.get(sym.id); var var_defs = var_defs_by_id.get(sym.id);
if (var_defs.length > 1 && !def.value) { if (var_defs.length > 1 && !def.value) {
compressor.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name)); compressor.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name));
var_defs.splice(var_defs.indexOf(def), 1); remove(var_defs, def);
sym.orig.splice(sym.orig.indexOf(def.name), 1); remove(sym.orig, def.name);
return; return;
} }
} }
@ -2096,7 +2095,7 @@ merge(Compressor.prototype, {
} else { } else {
compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", template(def.name)); compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", template(def.name));
} }
sym.orig.splice(sym.orig.indexOf(def.name), 1); remove(sym.orig, def.name);
} }
}); });
if (head.length == 0 && tail.length == 1 && tail[0].name instanceof AST_SymbolVar) { if (head.length == 0 && tail.length == 1 && tail[0].name instanceof AST_SymbolVar) {
@ -2104,9 +2103,8 @@ merge(Compressor.prototype, {
if (var_defs.length > 1) { if (var_defs.length > 1) {
var def = tail.pop(); var def = tail.pop();
compressor.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]", template(def.name)); compressor.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]", template(def.name));
var_defs.splice(var_defs.indexOf(def), 1); remove(var_defs, def);
var orig = def.name.definition().orig; remove(def.name.definition().orig, def.name);
orig.splice(orig.indexOf(def.name), 1);
side_effects.unshift(make_node(AST_Assign, def, { side_effects.unshift(make_node(AST_Assign, def, {
operator: "=", operator: "=",
left: make_node(AST_SymbolRef, def.name, def.name), left: make_node(AST_SymbolRef, def.name, def.name),

View File

@ -1114,3 +1114,36 @@ issue_1838: {
"}", "}",
] ]
} }
var_catch_toplevel: {
options = {
conditionals: true,
negate_iife: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
function f() {
a--;
try {
a++;
} catch(a) {
if (a) var a;
var a = 10;
}
}
f();
}
expect: {
!function() {
a--;
try {
a++;
} catch(a) {
var a;
}
}();
}
}