fix hoist_vars on reduce_vars (#1607)

`hoist_vars` converts variable declarations into plain assignments, which then confuses `reduce_vars`

fixes #1606
This commit is contained in:
Alex Lam S.L
2017-03-16 12:03:30 +08:00
committed by GitHub
parent cf4bf4ceb1
commit a80b228d8b
2 changed files with 28 additions and 2 deletions

View File

@@ -1986,7 +1986,7 @@ merge(Compressor.prototype, {
vars.set(def.name.name, def);
++vars_found;
});
var seq = node.to_assignments();
var seq = node.to_assignments(compressor);
var p = tt.parent();
if (p instanceof AST_ForIn && p.init === node) {
if (seq == null) {
@@ -2579,7 +2579,8 @@ merge(Compressor.prototype, {
this.definitions.forEach(function(def){ def.value = null });
});
AST_Definitions.DEFMETHOD("to_assignments", function(){
AST_Definitions.DEFMETHOD("to_assignments", function(compressor){
var reduce_vars = compressor.option("reduce_vars");
var assignments = this.definitions.reduce(function(a, def){
if (def.value) {
var name = make_node(AST_SymbolRef, def.name, def.name);
@@ -2588,6 +2589,7 @@ merge(Compressor.prototype, {
left : name,
right : def.value
}));
if (reduce_vars) name.definition().fixed = false;
}
return a;
}, []);

View File

@@ -1327,3 +1327,27 @@ issue_1595_4: {
})(3, 4, 5);
}
}
issue_1606: {
options = {
evaluate: true,
hoist_vars: true,
reduce_vars: true,
}
input: {
function f() {
var a;
function g(){};
var b = 2;
x(b);
}
}
expect: {
function f() {
var a, b;
function g(){};
b = 2;
x(b);
}
}
}