From 6b23899ef376459bc5734574b458cd637343548b Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 28 Jun 2024 21:19:58 +0300 Subject: [PATCH] fix corner case in `collapse_vars` (#5870) fixes #5869 --- lib/compress.js | 6 +++++- test/compress/collapse_vars.js | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index ac6c8fd6212..dfef0897826 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3327,10 +3327,14 @@ Compressor.prototype.compress = function(node) { } function update_symbols(value, node) { + var clear_defined = node instanceof AST_SymbolRef && !node.defined; var scope = node.scope || find_scope(scanner) || block_scope; value.walk(new TreeWalker(function(node) { if (node instanceof AST_BlockScope) return true; - if (node instanceof AST_Symbol) node.scope = scope; + if (node instanceof AST_Symbol) { + if (clear_defined && node instanceof AST_SymbolRef) node.defined = false; + node.scope = scope; + } })); } diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 68f650e2615..df6e1134922 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -10333,3 +10333,27 @@ issue_1666_undefined_strict: { } expect_stdout: true } + +issue_5869: { + options = { + collapse_vars: true, + evaluate: true, + pure_getters: "strict", + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + var a, b, log = console.log; + log(); + a.p = 0; + b = a; + log(b); + } + expect: { + var a, log = console.log; + log(); + log(void (a.p = 0)); + } + expect_stdout: TypeError("Cannot set properties of undefined") +}