fix reduce_vars on AST_Defun (#2708)

This commit is contained in:
Alex Lam S.L
2018-01-03 17:18:38 +08:00
committed by GitHub
parent 446fb0198b
commit 14778e049b
4 changed files with 257 additions and 25 deletions

View File

@@ -316,7 +316,7 @@ merge(Compressor.prototype, {
if (def.scope.uses_eval || def.scope.uses_with) {
def.fixed = false;
} else if (!compressor.exposed(def)) {
def.fixed = undefined;
def.fixed = def.init;
} else {
def.fixed = false;
}
@@ -329,10 +329,12 @@ merge(Compressor.prototype, {
function reset_variables(tw, compressor, node) {
node.variables.each(function(def) {
reset_def(compressor, def);
if (def.fixed === undefined && def.orig[0].TYPE == "SymbolVar") {
def.fixed = null;
if (def.fixed === null) {
def.safe_ids = tw.safe_ids;
mark(tw, def, true);
} else if (def.fixed) {
tw.loop_ids[def.id] = tw.in_loop;
mark(tw, def, true);
}
});
}
@@ -504,15 +506,6 @@ merge(Compressor.prototype, {
});
def(AST_Defun, function(tw, descend, compressor) {
this.inlined = false;
var d = this.name.definition();
if (compressor.exposed(d) || safe_to_read(tw, d)) {
d.fixed = false;
} else {
d.fixed = this;
d.single_use = ref_once(tw, compressor, d);
tw.loop_ids[d.id] = tw.in_loop;
mark(tw, d, true);
}
var save_ids = tw.safe_ids;
tw.safe_ids = Object.create(null);
reset_variables(tw, compressor, this);