diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-06-24 12:43:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-24 19:43:46 +0800 |
commit | 1a064b6e741f9c3e98f4e2de8084c48f324c0318 (patch) | |
tree | 64c8e372030465ac480464d3d58d99da67bca128 /lib | |
parent | 82772ccb12cfef97480fa8021032a53f90cd1f45 (diff) | |
download | tracifyjs-1a064b6e741f9c3e98f4e2de8084c48f324c0318.tar.gz tracifyjs-1a064b6e741f9c3e98f4e2de8084c48f324c0318.zip |
fix corner case in `functions` (#5035)
fixes #5034
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compress.js | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js index 3f9678a7..22f4736a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6562,10 +6562,25 @@ merge(Compressor.prototype, { if (def.orig.length > 1) return null; if (def.assignments > 0) return false; if (def.name == name) return def; - if (name == "await" && is_async(fn)) return false; - if (name == "yield" && is_generator(fn)) return false; + var forbidden; + switch (name) { + case "await": + forbidden = is_async; + break; + case "yield": + forbidden = is_generator; + break; + } return all(def.references, function(ref) { - return ref.scope.find_variable(name) === sym; + var scope = ref.scope; + if (scope.find_variable(name) !== sym) return false; + if (forbidden) { + scope = scope.resolve(); + do { + if (forbidden(scope)) return false; + } while ((scope = scope.parent_scope.resolve()) && scope !== fn); + } + return true; }) && def; } |