@@ -5964,7 +5964,7 @@ merge(Compressor.prototype, {
|
|||||||
if (old_def) old_def.forEach(function(node) {
|
if (old_def) old_def.forEach(function(node) {
|
||||||
node.name = name_def.name;
|
node.name = name_def.name;
|
||||||
node.thedef = name_def;
|
node.thedef = name_def;
|
||||||
node.reference({});
|
node.reference();
|
||||||
});
|
});
|
||||||
body.push(defun);
|
body.push(defun);
|
||||||
} else {
|
} else {
|
||||||
@@ -6798,7 +6798,7 @@ merge(Compressor.prototype, {
|
|||||||
scope: self,
|
scope: self,
|
||||||
thedef: decl.definition()
|
thedef: decl.definition()
|
||||||
});
|
});
|
||||||
sym.reference({});
|
sym.reference();
|
||||||
assignments.push(make_node(AST_Assign, node, {
|
assignments.push(make_node(AST_Assign, node, {
|
||||||
operator: "=",
|
operator: "=",
|
||||||
left: sym,
|
left: sym,
|
||||||
@@ -6845,7 +6845,7 @@ merge(Compressor.prototype, {
|
|||||||
scope: node.expression.scope,
|
scope: node.expression.scope,
|
||||||
thedef: def
|
thedef: def
|
||||||
});
|
});
|
||||||
sym.reference({});
|
sym.reference();
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
if (node instanceof AST_Unary) {
|
if (node instanceof AST_Unary) {
|
||||||
@@ -8469,12 +8469,12 @@ merge(Compressor.prototype, {
|
|||||||
node = maintain_this_binding(compressor, parent, current, node);
|
node = maintain_this_binding(compressor, parent, current, node);
|
||||||
if (replacing || best_of_expression(node, self) === node) {
|
if (replacing || best_of_expression(node, self) === node) {
|
||||||
refs.forEach(function(ref) {
|
refs.forEach(function(ref) {
|
||||||
var def = ref.definition();
|
ref.scope = exp === fn ? fn.parent_scope : exp.scope;
|
||||||
def.references.push(ref);
|
ref.reference();
|
||||||
if (replacing) {
|
if (replacing) {
|
||||||
def.replaced++;
|
ref.definition().replaced++;
|
||||||
} else {
|
} else {
|
||||||
def.single_use = false;
|
ref.definition().single_use = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return node;
|
return node;
|
||||||
@@ -10853,7 +10853,7 @@ merge(Compressor.prototype, {
|
|||||||
}, fn.argnames) === argname) {
|
}, fn.argnames) === argname) {
|
||||||
def.reassigned = false;
|
def.reassigned = false;
|
||||||
var sym = make_node(AST_SymbolRef, self, argname);
|
var sym = make_node(AST_SymbolRef, self, argname);
|
||||||
sym.reference({});
|
sym.reference();
|
||||||
delete argname.__unused;
|
delete argname.__unused;
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -433,7 +433,9 @@ AST_Symbol.DEFMETHOD("mark_enclosed", function(options) {
|
|||||||
var def = this.definition();
|
var def = this.definition();
|
||||||
for (var s = this.scope; s; s = s.parent_scope) {
|
for (var s = this.scope; s; s = s.parent_scope) {
|
||||||
push_uniq(s.enclosed, def);
|
push_uniq(s.enclosed, def);
|
||||||
if (options.keep_fnames) {
|
if (!options) {
|
||||||
|
delete s._var_names;
|
||||||
|
} else if (options.keep_fnames) {
|
||||||
s.functions.each(function(d) {
|
s.functions.each(function(d) {
|
||||||
push_uniq(def.scope.enclosed, d);
|
push_uniq(def.scope.enclosed, d);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5436,3 +5436,125 @@ issue_4655: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4659_1: {
|
||||||
|
options = {
|
||||||
|
inline: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
f && f();
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
f && a++;
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "1"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_4659_2: {
|
||||||
|
options = {
|
||||||
|
inline: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
(function() {
|
||||||
|
f && f();
|
||||||
|
})();
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
void (f && a++);
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "1"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_4659_3: {
|
||||||
|
options = {
|
||||||
|
inline: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
function g() {
|
||||||
|
while (!console);
|
||||||
|
}
|
||||||
|
g(f && f());
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0;
|
||||||
|
(function() {
|
||||||
|
function f() {
|
||||||
|
return a++;
|
||||||
|
}
|
||||||
|
(function() {
|
||||||
|
(function() {
|
||||||
|
while (!console);
|
||||||
|
})(f && a++);
|
||||||
|
(function() {
|
||||||
|
var a = console && a;
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "1"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user