@@ -3602,7 +3602,7 @@ merge(Compressor.prototype, {
|
|||||||
compressor.warn("Declaring {name} as function [{file}:{line},{col}]", template(def.name));
|
compressor.warn("Declaring {name} as function [{file}:{line},{col}]", template(def.name));
|
||||||
var defun = make_node(AST_Defun, def, def.value);
|
var defun = make_node(AST_Defun, def, def.value);
|
||||||
defun.name = make_node(AST_SymbolDefun, def.name, def.name);
|
defun.name = make_node(AST_SymbolDefun, def.name, def.name);
|
||||||
self.def_function(defun.name);
|
defun.parent_scope.resolve().def_function(defun.name);
|
||||||
body.push(defun);
|
body.push(defun);
|
||||||
} else {
|
} else {
|
||||||
if (side_effects.length > 0) {
|
if (side_effects.length > 0) {
|
||||||
|
|||||||
@@ -61,8 +61,6 @@ SymbolDef.next_id = 1;
|
|||||||
|
|
||||||
SymbolDef.prototype = {
|
SymbolDef.prototype = {
|
||||||
unmangleable: function(options) {
|
unmangleable: function(options) {
|
||||||
if (!options) options = {};
|
|
||||||
|
|
||||||
return this.global && !options.toplevel
|
return this.global && !options.toplevel
|
||||||
|| this.undeclared
|
|| this.undeclared
|
||||||
|| !options.eval && this.scope.pinned()
|
|| !options.eval && this.scope.pinned()
|
||||||
@@ -296,7 +294,7 @@ AST_Scope.DEFMETHOD("def_variable", function(symbol, init) {
|
|||||||
|
|
||||||
AST_Lambda.DEFMETHOD("resolve", return_this);
|
AST_Lambda.DEFMETHOD("resolve", return_this);
|
||||||
AST_Scope.DEFMETHOD("resolve", function() {
|
AST_Scope.DEFMETHOD("resolve", function() {
|
||||||
return this.parent_scope;
|
return this.parent_scope.resolve();
|
||||||
});
|
});
|
||||||
AST_Toplevel.DEFMETHOD("resolve", return_this);
|
AST_Toplevel.DEFMETHOD("resolve", return_this);
|
||||||
|
|
||||||
|
|||||||
@@ -2916,3 +2916,68 @@ issue_2485: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "6"
|
expect_stdout: "6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_3364: {
|
||||||
|
options = {
|
||||||
|
functions: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
mangle = {}
|
||||||
|
input: {
|
||||||
|
var s = 2, a = 100, b = 10, c = 0;
|
||||||
|
function f(p, e, r) {
|
||||||
|
try {
|
||||||
|
for (var i = 1; i-- > 0;)
|
||||||
|
var a = function(x) {
|
||||||
|
function g(y) {
|
||||||
|
y && y[a++];
|
||||||
|
}
|
||||||
|
var x = g(--s >= 0 && f(c++));
|
||||||
|
for (var j = 1; --j > 0;);
|
||||||
|
}();
|
||||||
|
} catch (e) {
|
||||||
|
try {
|
||||||
|
return;
|
||||||
|
} catch (z) {
|
||||||
|
for (var k = 1; --k > 0;) {
|
||||||
|
for (var l = 1; l > 0; --l) {
|
||||||
|
var n = function() {};
|
||||||
|
for (var k in n)
|
||||||
|
var o = (n, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var r = f();
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var s = 2, c = 0;
|
||||||
|
(function n(r, o, a) {
|
||||||
|
try {
|
||||||
|
for (var f = 1; f-- >0;)
|
||||||
|
var t = function(r) {
|
||||||
|
(function(r) {
|
||||||
|
r && r[t++];
|
||||||
|
})(--s >= 0 && n(c++));
|
||||||
|
for (var o = 1; --o > 0;);
|
||||||
|
}();
|
||||||
|
} catch (o) {
|
||||||
|
try {
|
||||||
|
return;
|
||||||
|
} catch (r) {
|
||||||
|
for (var v = 1; --v > 0;)
|
||||||
|
for (var i = 1; i > 0;--i) {
|
||||||
|
function u() {}
|
||||||
|
for (var v in u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "2"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user