diff --git a/lib/compress.js b/lib/compress.js index 7eb228559c..a7b6397274 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -12746,7 +12746,7 @@ Compressor.prototype.compress = function(node) { if (flatten && value.has_side_effects(compressor)) flatten = false; } } - values.unshift(retValue); + if (!flatten) values.unshift(retValue); while (--i >= 0) { var value = elements[i].drop_side_effect_free(compressor); if (value) { @@ -12757,7 +12757,11 @@ Compressor.prototype.compress = function(node) { index--; } } - return flatten ? make_sequence(self, values).optimize(compressor) : make_node(AST_Sub, self, { + if (flatten) { + values.push(retValue); + return make_sequence(self, values).optimize(compressor); + } + return make_node(AST_Sub, self, { expression: make_node(AST_Array, expr, { elements: values }), property: make_node(AST_Number, prop, { value: index }), }); diff --git a/test/compress/ie.js b/test/compress/ie.js index 4d85fec0b8..60c48c429d 100644 --- a/test/compress/ie.js +++ b/test/compress/ie.js @@ -3444,3 +3444,33 @@ issue_5269_3_ie: { "bar", ] } + +issue_5350: { + options = { + ie: false, + properties: true, + side_effects: true, + } + input: { + console.log(typeof f, [ 42, function f() {} ][0]); + } + expect: { + console.log(typeof f, 42); + } + expect_stdout: "undefined 42" +} + +issue_5350_ie: { + options = { + ie: true, + properties: true, + side_effects: true, + } + input: { + console.log(typeof f, [ 42, function f() {} ][0]); + } + expect: { + console.log(typeof f, (function f() {}, 42)); + } + expect_stdout: "undefined 42" +}