@@ -12901,15 +12901,16 @@ Compressor.prototype.compress = function(node) {
|
|||||||
AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) {
|
AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) {
|
||||||
if (!compressor.option("properties")) return;
|
if (!compressor.option("properties")) return;
|
||||||
if (key === "__proto__") return;
|
if (key === "__proto__") return;
|
||||||
var expr = this.expression;
|
var self = this;
|
||||||
if (expr instanceof AST_Object) {
|
var expr = self.expression;
|
||||||
|
if (!(expr instanceof AST_Object)) return;
|
||||||
var props = expr.properties;
|
var props = expr.properties;
|
||||||
for (var i = props.length; --i >= 0;) {
|
for (var i = props.length; --i >= 0;) {
|
||||||
var prop = props[i];
|
var prop = props[i];
|
||||||
if (prop.key !== key) continue;
|
if (prop.key !== key) continue;
|
||||||
if (!all(props, can_hoist_property)) return;
|
if (!all(props, can_hoist_property)) return;
|
||||||
if (!safe_to_flatten(prop.value, compressor)) return;
|
if (!safe_to_flatten(prop.value, compressor)) return;
|
||||||
var scope, values = [];
|
var call, scope, values = [];
|
||||||
for (var j = 0; j < props.length; j++) {
|
for (var j = 0; j < props.length; j++) {
|
||||||
var value = props[j].value;
|
var value = props[j].value;
|
||||||
if (props[j] instanceof AST_ObjectMethod) {
|
if (props[j] instanceof AST_ObjectMethod) {
|
||||||
@@ -12924,21 +12925,21 @@ Compressor.prototype.compress = function(node) {
|
|||||||
var ctor;
|
var ctor;
|
||||||
if (arrow) {
|
if (arrow) {
|
||||||
ctor = is_async(value) ? AST_AsyncArrow : AST_Arrow;
|
ctor = is_async(value) ? AST_AsyncArrow : AST_Arrow;
|
||||||
} else if (i === j && !(compressor.parent() instanceof AST_Call)) {
|
} else if (i != j
|
||||||
return;
|
|| (call = compressor.parent()) instanceof AST_Call && call.expression === self) {
|
||||||
} else {
|
|
||||||
ctor = value.CTOR;
|
ctor = value.CTOR;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
value = make_node(ctor, value, value);
|
value = make_node(ctor, value, value);
|
||||||
}
|
}
|
||||||
values.push(value);
|
values.push(value);
|
||||||
}
|
}
|
||||||
return make_node(AST_Sub, this, {
|
return make_node(AST_Sub, self, {
|
||||||
expression: make_node(AST_Array, expr, { elements: values }),
|
expression: make_node(AST_Array, expr, { elements: values }),
|
||||||
property: make_node(AST_Number, this, { value: i }),
|
property: make_node(AST_Number, self, { value: i }),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
OPT(AST_Dot, function(self, compressor) {
|
OPT(AST_Dot, function(self, compressor) {
|
||||||
|
|||||||
@@ -2502,3 +2502,39 @@ issue_5352: {
|
|||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
node_version: ">=12"
|
node_version: ">=12"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5387: {
|
||||||
|
options = {
|
||||||
|
properties: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
"use strict";
|
||||||
|
(function(a) {
|
||||||
|
try {
|
||||||
|
class A extends a {}
|
||||||
|
} catch (e) {
|
||||||
|
console.log("PASS");
|
||||||
|
}
|
||||||
|
})({
|
||||||
|
f() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}.f);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
"use strict";
|
||||||
|
(function(a) {
|
||||||
|
try {
|
||||||
|
class A extends a {}
|
||||||
|
} catch (e) {
|
||||||
|
console.log("PASS");
|
||||||
|
}
|
||||||
|
})({
|
||||||
|
f() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}.f);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
node_version: ">=4"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user