fix corner cases in optional_chains (#5110)
This commit is contained in:
@@ -1721,11 +1721,6 @@ merge(Compressor.prototype, {
|
||||
return x;
|
||||
}
|
||||
|
||||
function root_expr(prop) {
|
||||
while (prop instanceof AST_PropAccess) prop = prop.expression;
|
||||
return prop;
|
||||
}
|
||||
|
||||
function is_iife_call(node) {
|
||||
if (node.TYPE != "Call") return false;
|
||||
do {
|
||||
@@ -9070,16 +9065,20 @@ merge(Compressor.prototype, {
|
||||
OPT(AST_Const, varify);
|
||||
OPT(AST_Let, varify);
|
||||
|
||||
function trim_optional_chain(self, compressor) {
|
||||
function trim_optional_chain(node, compressor) {
|
||||
if (!compressor.option("optional_chains")) return;
|
||||
if (!self.optional) return;
|
||||
var expr = self.expression;
|
||||
var ev = fuzzy_eval(compressor, expr, true);
|
||||
if (ev == null) return make_node(AST_UnaryPrefix, self, {
|
||||
operator: "void",
|
||||
expression: expr,
|
||||
}).optimize(compressor);
|
||||
if (!(ev instanceof AST_Node)) self.optional = false;
|
||||
if (node.terminal) do {
|
||||
var expr = node.expression;
|
||||
if (node.optional) {
|
||||
var ev = fuzzy_eval(compressor, expr, true);
|
||||
if (ev == null) return make_node(AST_UnaryPrefix, node, {
|
||||
operator: "void",
|
||||
expression: expr,
|
||||
}).optimize(compressor);
|
||||
if (!(ev instanceof AST_Node)) node.optional = false;
|
||||
}
|
||||
node = expr;
|
||||
} while ((node.TYPE == "Call" || node instanceof AST_PropAccess) && !node.terminal);
|
||||
}
|
||||
|
||||
function lift_sequence_in_expression(node, compressor) {
|
||||
|
||||
Reference in New Issue
Block a user