if (can_substitute_directly()) {
var args = self.args.slice();
var refs = [];
- args.push(value.clone(true).transform(new TreeTransformer(function(node) {
+ var retValue = value.clone(true).transform(new TreeTransformer(function(node) {
if (node instanceof AST_SymbolRef) {
var def = node.definition();
if (fn.variables.get(node.name) !== def) {
var parent = this.parent();
return parent ? maintain_this_binding(compressor, parent, node, arg) : arg;
}
- })));
+ }));
var save_inlined = fn.inlined;
if (exp !== fn) fn.inlined = true;
- var node = make_sequence(self, args.filter(function(arg) {
- return arg;
- })).optimize(compressor);
+ var exprs = [];
+ args.forEach(function(arg) {
+ if (!arg) return;
+ arg = arg.clone(true);
+ arg.walk(new TreeWalker(function(node) {
+ if (node instanceof AST_SymbolRef) refs.push(node);
+ }));
+ exprs.push(arg);
+ }, []);
+ exprs.push(retValue);
+ var node = make_sequence(self, exprs).optimize(compressor);
fn.inlined = save_inlined;
node = maintain_this_binding(compressor, parent, current, node);
if (replacing || best_of_expression(node, self) === node) {
}
expect_stdout: "42"
}
+
+issue_5173_1: {
+ options = {
+ conditionals: true,
+ inline: true,
+ reduce_vars: true,
+ side_effects: true,
+ toplevel: true,
+ }
+ input: {
+ function f(a, b) {
+ console.log(b);
+ }
+ f([ A = 42, [] + "" || (A = f) ]);
+ }
+ expect: {
+ function f(a, b) {
+ console.log(b);
+ }
+ f([ A = 42, [] + "" || (A = f) ]);
+ }
+ expect_stdout: "undefined"
+}
+
+issue_5173_2: {
+ options = {
+ conditionals: true,
+ inline: true,
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function f(a, b) {
+ console.log(b);
+ }
+ f([ A = 42, [] + "" || (A = f) ]);
+ }
+ expect: {
+ function f(a, b) {
+ console.log(b);
+ }
+ f(A = [] + "" ? 42 : f);
+ }
+ expect_stdout: "undefined"
+}