aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js8
-rw-r--r--test/compress/const.js29
-rw-r--r--test/ufuzz/index.js2
3 files changed, 36 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js
index c4012031..fc65e426 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1599,9 +1599,13 @@ merge(Compressor.prototype, {
}
if (node instanceof AST_SymbolRef) {
if (symbol_in_lvalues(node, parent)) {
- return !parent || parent.operator != "=" || parent.left !== node;
+ return !(parent instanceof AST_Assign && parent.operator == "=" && parent.left === node);
}
- return side_effects && may_modify(node);
+ if (side_effects && may_modify(node)) return true;
+ var def = node.definition();
+ return (in_try || def.scope.resolve() !== scope) && !all(def.orig, function(sym) {
+ return !(sym instanceof AST_SymbolConst);
+ });
}
if (node instanceof AST_This) return symbol_in_lvalues(node, parent);
if (node instanceof AST_VarDef) {
diff --git a/test/compress/const.js b/test/compress/const.js
index 6cd1124a..f2b92247 100644
--- a/test/compress/const.js
+++ b/test/compress/const.js
@@ -776,3 +776,32 @@ issue_4195: {
}
expect_stdout: "undefined"
}
+
+issue_4197: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = 0;
+ try {
+ const b = function() {
+ a = 1;
+ b[1];
+ }();
+ } catch (e) {
+ console.log(a);
+ }
+ }
+ expect: {
+ var a = 0;
+ try {
+ const b = function() {
+ a = 1;
+ b[1];
+ }();
+ } catch (e) {
+ console.log(a);
+ }
+ }
+ expect_stdout: "1"
+}
diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js
index 717252d3..3e2d865d 100644
--- a/test/ufuzz/index.js
+++ b/test/ufuzz/index.js
@@ -1348,7 +1348,7 @@ for (var round = 1; round <= num_iterations; round++) {
ok = sandbox.same_stdout(sandbox.run_code(sort_globals(original_code)), sandbox.run_code(sort_globals(uglify_code)));
}
// ignore numerical imprecision caused by `unsafe_math`
- if (!ok && typeof uglify_result == "string" && o.compress && o.compress.unsafe_math) {
+ if (!ok && o.compress && o.compress.unsafe_math && typeof original_result == "string" && typeof uglify_result == "string") {
ok = fuzzy_match(original_result, uglify_result);
if (!ok) {
var fuzzy_result = sandbox.run_code(original_code.replace(/( - 0\.1){3}/g, " - 0.3"), toplevel);