Skip to content

Commit

Permalink
fix corner case in functions (#4789)
Browse files Browse the repository at this point in the history
fixes #4788
  • Loading branch information
alexlamsl committed Mar 16, 2021
1 parent b98ce6c commit 9a95430
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 5 deletions.
10 changes: 7 additions & 3 deletions lib/compress.js
Expand Up @@ -6279,11 +6279,15 @@ merge(Compressor.prototype, {
function can_rename(fn, name) {
if (!fn.name) return !fn.variables.get(name);
old_def = fn.name.definition();
if (old_def.assignments > 0) return false;
if (old_def.name == name) return true;
if (old_def.orig.length > 1) {
old_def = null;
} else {
if (old_def.assignments > 0) return false;
if (old_def.name == name) return true;
}
if (name == "await" && is_async(fn)) return false;
if (name == "yield" && is_generator(fn)) return false;
return all(old_def.references, function(ref) {
return !old_def || all(old_def.references, function(ref) {
return ref.scope.find_variable(name) === sym;
});
}
Expand Down
37 changes: 37 additions & 0 deletions test/compress/functions.js
Expand Up @@ -5912,3 +5912,40 @@ issue_4753_2: {
}
expect_stdout: "PASS"
}

issue_4788: {
options = {
evaluate: true,
functions: true,
keep_fnames: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
var a = function g() {
if (0) {
var g = 42;
f();
}
g || console.log("PASS");
};
a(a);
}
f();
}
expect: {
(function f() {
function a() {
if (0) {
var g = 42;
f();
}
g || console.log("PASS");
}
a();
})();
}
expect_stdout: "PASS"
}
2 changes: 1 addition & 1 deletion test/compress/hoist_vars.js
Expand Up @@ -153,7 +153,7 @@ issue_4487: {
}
expect: {
function a() {
var a = console.log(typeof a);
var f = console.log(typeof f);
}
a();
}
Expand Down
6 changes: 5 additions & 1 deletion test/ufuzz/index.js
Expand Up @@ -1947,7 +1947,11 @@ function createTypeofExpr(recurmax, stmtDepth, canThrow) {
}

function createValue() {
return VALUES[rng(VALUES.length)];
var v;
do {
v = VALUES[rng(VALUES.length)];
} while (v == "new.target" && rng(200));
return v;
}

function createBinaryOp(noComma, canThrow) {
Expand Down

0 comments on commit 9a95430

Please sign in to comment.