aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js10
-rw-r--r--test/compress/reduce_vars.js21
-rw-r--r--test/ufuzz/index.js2
3 files changed, 28 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js
index fb4836bf..6e0d36a7 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -577,9 +577,10 @@ merge(Compressor.prototype, {
sym.fixed = d.fixed = eq ? function() {
return node.right;
} : function() {
- return make_node(AST_Binary, node, {
+ var value = fixed instanceof AST_Node ? fixed : fixed();
+ return value && make_node(AST_Binary, node, {
operator: node.operator.slice(0, -1),
- left: fixed instanceof AST_Node ? fixed : fixed(),
+ left: value,
right: node.right
});
};
@@ -858,11 +859,12 @@ merge(Compressor.prototype, {
var fixed = d.fixed;
if (!fixed) return;
exp.fixed = d.fixed = function() {
- return make_node(AST_Binary, node, {
+ var value = fixed instanceof AST_Node ? fixed : fixed();
+ return value && make_node(AST_Binary, node, {
operator: node.operator.slice(0, -1),
left: make_node(AST_UnaryPrefix, node, {
operator: "+",
- expression: fixed instanceof AST_Node ? fixed : fixed()
+ expression: value
}),
right: make_node(AST_Number, node, {
value: 1
diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js
index 67d473dd..ec75e911 100644
--- a/test/compress/reduce_vars.js
+++ b/test/compress/reduce_vars.js
@@ -7033,3 +7033,24 @@ issue_3844: {
}
expect_stdout: "undefined"
}
+
+issue_3866: {
+ options = {
+ dead_code: true,
+ evaluate: true,
+ reduce_vars: true,
+ }
+ input: {
+ console.log(function() {
+ {
+ return "PASS";
+ var a = 0;
+ }
+ return --a;
+ }());
+ }
+ expect: {
+ console.log("PASS");
+ }
+ expect_stdout: "PASS"
+}
diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js
index 1a2163ed..616378cf 100644
--- a/test/ufuzz/index.js
+++ b/test/ufuzz/index.js
@@ -1181,7 +1181,7 @@ for (var round = 1; round <= num_iterations; round++) {
}
}
} else {
- uglify_code = uglify_code.error;
+ uglify_code = uglify_result = uglify_code.error;
ok = sandbox.same_stdout(original_result, uglify_result);
}
if (verbose || (verbose_interval && !(round % INTERVAL_COUNT)) || !ok) log(options);