collapse_vars: fix bug in repeated var defs of same name

This commit is contained in:
kzc
2016-01-27 18:35:49 -05:00
committed by Richard van Velzen
parent 3eb9101918
commit af2472d85e
2 changed files with 33 additions and 8 deletions

View File

@@ -255,16 +255,25 @@ merge(Compressor.prototype, {
var var_defs = prev_stat.definitions;
if (var_defs == null) continue;
// Scan variable definitions from right to left.
var var_names_seen = {};
var side_effects_encountered = false;
var lvalues_encountered = false;
var lvalues = {};
// Scan variable definitions from right to left.
for (var var_defs_index = var_defs.length; --var_defs_index >= 0;) {
// Obtain var declaration and var name with basic sanity check.
var var_decl = var_defs[var_defs_index];
if (var_decl.value == null) continue;
if (var_decl.value == null) break;
var var_name = var_decl.name.name;
if (!var_name || !var_name.length) break;
// Bail if we've seen a var definition of same name before.
if (var_name in var_names_seen) break;
var_names_seen[var_name] = true;
// Only interested in cases with just one reference to the variable.
var var_name = var_decl.name.name;
var def = self.find_variable && self.find_variable(var_name);
if (!def || !def.references || def.references.length !== 1 || var_name == "arguments") {
side_effects_encountered = true;