mirror of
https://github.com/zhigang1992/esbuild.git
synced 2026-01-12 17:13:19 +08:00
only cull optional chains when minifying
This commit is contained in:
@@ -508,11 +508,18 @@ flatten:
|
||||
|
||||
// Stop now if we can strip the whole chain as dead code. Since the chain is
|
||||
// lazily evaluated, it's safe to just drop the code entirely.
|
||||
if isNullOrUndefined, sideEffects, ok := toNullOrUndefinedWithSideEffects(expr.Data); ok && isNullOrUndefined {
|
||||
if sideEffects == couldHaveSideEffects {
|
||||
return js_ast.JoinWithComma(p.simplifyUnusedExpr(expr), valueWhenUndefined), exprOut{}
|
||||
if p.options.mangleSyntax {
|
||||
if isNullOrUndefined, sideEffects, ok := toNullOrUndefinedWithSideEffects(expr.Data); ok && isNullOrUndefined {
|
||||
if sideEffects == couldHaveSideEffects {
|
||||
return js_ast.JoinWithComma(p.simplifyUnusedExpr(expr), valueWhenUndefined), exprOut{}
|
||||
}
|
||||
return valueWhenUndefined, exprOut{}
|
||||
}
|
||||
} else {
|
||||
switch expr.Data.(type) {
|
||||
case *js_ast.ENull, *js_ast.EUndefined:
|
||||
return valueWhenUndefined, exprOut{}
|
||||
}
|
||||
return valueWhenUndefined, exprOut{}
|
||||
}
|
||||
|
||||
// We need to lower this if this is an optional call off of a private name
|
||||
|
||||
@@ -429,13 +429,13 @@ func TestLowerOptionalChain(t *testing.T) {
|
||||
expectPrintedTarget(t, 2019, "delete undefined?.[x]", "true;\n")
|
||||
expectPrintedTarget(t, 2019, "delete undefined?.(x)", "true;\n")
|
||||
|
||||
expectPrintedTarget(t, 2019, "(foo(), null)?.x", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2019, "(foo(), null)?.[x]", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2019, "(foo(), null)?.(x)", "foo(), void 0;\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), null)?.x; y = (bar(), null)?.x", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), null)?.[x]; y = (bar(), null)?.[x]", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), null)?.(x); y = (bar(), null)?.(x)", "foo(), y = (bar(), void 0);\n")
|
||||
|
||||
expectPrintedTarget(t, 2019, "(foo(), void 0)?.x", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2019, "(foo(), void 0)?.[x]", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2019, "(foo(), void 0)?.(x)", "foo(), void 0;\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), void 0)?.x; y = (bar(), void 0)?.x", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), void 0)?.[x]; y = (bar(), void 0)?.[x]", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2019, "(foo(), void 0)?.(x); y = (bar(), void 0)?.(x)", "foo(), y = (bar(), void 0);\n")
|
||||
|
||||
expectPrintedTarget(t, 2020, "x?.y", "x?.y;\n")
|
||||
expectPrintedTarget(t, 2020, "x?.[y]", "x?.[y];\n")
|
||||
@@ -449,13 +449,21 @@ func TestLowerOptionalChain(t *testing.T) {
|
||||
expectPrintedTarget(t, 2020, "undefined?.[x]", "void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "undefined?.(x)", "void 0;\n")
|
||||
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.x", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.[x]", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.(x)", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.x", "(foo(), null)?.x;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.[x]", "(foo(), null)?.[x];\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), null)?.(x)", "(foo(), null)?.(x);\n")
|
||||
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.x", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.[x]", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.(x)", "foo(), void 0;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.x", "(foo(), void 0)?.x;\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.[x]", "(foo(), void 0)?.[x];\n")
|
||||
expectPrintedTarget(t, 2020, "(foo(), void 0)?.(x)", "(foo(), void 0)?.(x);\n")
|
||||
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), null)?.x; y = (bar(), null)?.x", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), null)?.[x]; y = (bar(), null)?.[x]", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), null)?.(x); y = (bar(), null)?.(x)", "foo(), y = (bar(), void 0);\n")
|
||||
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), void 0)?.x; y = (bar(), void 0)?.x", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), void 0)?.[x]; y = (bar(), void 0)?.[x]", "foo(), y = (bar(), void 0);\n")
|
||||
expectPrintedMangleTarget(t, 2020, "(foo(), void 0)?.(x); y = (bar(), void 0)?.(x)", "foo(), y = (bar(), void 0);\n")
|
||||
|
||||
expectPrintedTarget(t, 2019, "a?.b()", "a == null ? void 0 : a.b();\n")
|
||||
expectPrintedTarget(t, 2019, "a?.[b]()", "a == null ? void 0 : a[b]();\n")
|
||||
|
||||
Reference in New Issue
Block a user