@@ -6942,9 +6942,7 @@ merge(Compressor.prototype, {
|
|||||||
if (defs.length > 0) {
|
if (defs.length > 0) {
|
||||||
// try to merge in assignments
|
// try to merge in assignments
|
||||||
insert_vars(self.body);
|
insert_vars(self.body);
|
||||||
defs = make_node(AST_Var, self, {
|
defs = make_node(AST_Var, self, { definitions: defs });
|
||||||
definitions: defs
|
|
||||||
});
|
|
||||||
hoisted.push(defs);
|
hoisted.push(defs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8367,12 +8365,14 @@ merge(Compressor.prototype, {
|
|||||||
AST_Definitions.DEFMETHOD("to_assignments", function() {
|
AST_Definitions.DEFMETHOD("to_assignments", function() {
|
||||||
var assignments = this.definitions.reduce(function(a, defn) {
|
var assignments = this.definitions.reduce(function(a, defn) {
|
||||||
var def = defn.name.definition();
|
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);
|
var name = make_node(AST_SymbolRef, defn.name, defn.name);
|
||||||
a.push(make_node(AST_Assign, defn, {
|
a.push(make_node(AST_Assign, defn, {
|
||||||
operator : "=",
|
operator: "=",
|
||||||
left : name,
|
left: name,
|
||||||
right : defn.value
|
right: value,
|
||||||
}));
|
}));
|
||||||
def.references.push(name);
|
def.references.push(name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,3 +265,32 @@ issue_4839: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
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"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1796,11 +1796,9 @@ function createClassLiteral(recurmax, stmtDepth, canThrow, name) {
|
|||||||
if (SUPPORT.class_field && rng(2)) {
|
if (SUPPORT.class_field && rng(2)) {
|
||||||
s += internal || createObjectKey(recurmax, stmtDepth, canThrow);
|
s += internal || createObjectKey(recurmax, stmtDepth, canThrow);
|
||||||
if (rng(5)) {
|
if (rng(5)) {
|
||||||
async = false;
|
async = bug_async_class_await && fixed;
|
||||||
generator = false;
|
generator = false;
|
||||||
if (bug_async_class_await && fixed) addAvoidVar("await");
|
|
||||||
s += " = " + createExpression(recurmax, NO_COMMA, stmtDepth, fixed ? canThrow : CANNOT_THROW);
|
s += " = " + createExpression(recurmax, NO_COMMA, stmtDepth, fixed ? canThrow : CANNOT_THROW);
|
||||||
if (bug_async_class_await && fixed) removeAvoidVar("await");
|
|
||||||
generator = save_generator;
|
generator = save_generator;
|
||||||
async = save_async;
|
async = save_async;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user