aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js14
-rw-r--r--test/compress/hoist_vars.js29
-rw-r--r--test/ufuzz/index.js4
3 files changed, 37 insertions, 10 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 010dcf46..846c391b 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -6942,9 +6942,7 @@ merge(Compressor.prototype, {
if (defs.length > 0) {
// try to merge in assignments
insert_vars(self.body);
- defs = make_node(AST_Var, self, {
- definitions: defs
- });
+ defs = make_node(AST_Var, self, { definitions: defs });
hoisted.push(defs);
}
}
@@ -8367,12 +8365,14 @@ merge(Compressor.prototype, {
AST_Definitions.DEFMETHOD("to_assignments", function() {
var assignments = this.definitions.reduce(function(a, defn) {
var def = defn.name.definition();
- if (defn.value) {
+ var value = defn.value;
+ if (value) {
+ if (value instanceof AST_Sequence) value = value.clone();
var name = make_node(AST_SymbolRef, defn.name, defn.name);
a.push(make_node(AST_Assign, defn, {
- operator : "=",
- left : name,
- right : defn.value
+ operator: "=",
+ left: name,
+ right: value,
}));
def.references.push(name);
}
diff --git a/test/compress/hoist_vars.js b/test/compress/hoist_vars.js
index 8db060df..a6efa7af 100644
--- a/test/compress/hoist_vars.js
+++ b/test/compress/hoist_vars.js
@@ -265,3 +265,32 @@ issue_4839: {
}
expect_stdout: "PASS"
}
+
+issue_4859: {
+ options = {
+ evaluate: true,
+ hoist_vars: true,
+ keep_infinity: true,
+ merge_vars: true,
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function f(a) {
+ var b = (a = 2, 1 / 0), c = 3;
+ var d = a + b;
+ console.log(d);
+ return f;
+ }
+ f();
+ }
+ expect: {
+ (function f(a) {
+ var d = 1 / 0, d = Infinity;
+ console.log(d);
+ return f;
+ })();
+ }
+ expect_stdout: "Infinity"
+}
diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js
index 5a791f19..69760b22 100644
--- a/test/ufuzz/index.js
+++ b/test/ufuzz/index.js
@@ -1796,11 +1796,9 @@ function createClassLiteral(recurmax, stmtDepth, canThrow, name) {
if (SUPPORT.class_field && rng(2)) {
s += internal || createObjectKey(recurmax, stmtDepth, canThrow);
if (rng(5)) {
- async = false;
+ async = bug_async_class_await && fixed;
generator = false;
- if (bug_async_class_await && fixed) addAvoidVar("await");
s += " = " + createExpression(recurmax, NO_COMMA, stmtDepth, fixed ? canThrow : CANNOT_THROW);
- if (bug_async_class_await && fixed) removeAvoidVar("await");
generator = save_generator;
async = save_async;
}