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);
}
}
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);
}
}
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"
+}
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;
}