Skip to content

Commit

Permalink
simplify unused empty function arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
evanw committed Dec 31, 2021
1 parent 0229eae commit 3d66d2a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 19 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
function assertFoo(o){}const val=getFoo();assertFoo(val),console.log(val.bar);

// New output (with --minify --define:window.DEBUG=false)
function assertFoo(o){}const val=getFoo();val,void 0,console.log(val.bar);
function assertFoo(o){}const val=getFoo();void 0,console.log(val.bar);
```

## 0.14.9
Expand Down
14 changes: 7 additions & 7 deletions internal/bundler/snapshots/snapshots_dce.txt
Original file line number Diff line number Diff line change
Expand Up @@ -272,14 +272,14 @@ TestInlineEmptyFunctionCalls
function DROP() {
}
console.log((foo(), bar(), void 0));
console.log((foo(), 1, void 0));
console.log((1, foo(), void 0));
console.log((1, void 0));
console.log((foo(), void 0));
console.log((foo(), void 0));
console.log(void 0);
foo(), bar(), void 0;
foo(), 1, void 0;
1, foo(), void 0;
1, void 0;
console.log(void 0);
foo(), bar();
foo();
foo();
void 0;
void 0;

---------- /out/empty-comma.js ----------
Expand Down
32 changes: 21 additions & 11 deletions internal/js_printer/js_printer.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,7 @@ func (p *printer) printJSXTag(tagOrNil js_ast.Expr) {

type printer struct {
symbols js_ast.SymbolMap
isUnbound func(js_ast.Ref) bool
renamer renamer.Renamer
importRecords []ast.ImportRecord
options Options
Expand Down Expand Up @@ -1313,8 +1314,10 @@ func (p *printer) printUndefined(level js_ast.L) {
}

func (p *printer) printExpr(expr js_ast.Expr, level js_ast.L, flags printExprFlags) {
wasFollowedByOf := (flags & isFollowedByOf) != 0
flags &= ^isFollowedByOf
originalFlags := flags

// Turn these flags off so we don't unintentionally propagate them to child calls
flags &= ^(isFollowedByOf | exprResultIsUnused)

p.addSourceMapping(expr.Loc)

Expand Down Expand Up @@ -1495,16 +1498,18 @@ func (p *printer) printExpr(expr js_ast.Expr, level js_ast.L, flags printExprFla
if (symbolFlags & (js_ast.IsEmptyFunction | js_ast.CouldPotentiallyBeMutated)) == js_ast.IsEmptyFunction {
var replacement js_ast.Expr
for _, arg := range e.Args {
replacement = js_ast.JoinWithComma(replacement, arg)
replacement = js_ast.JoinWithComma(replacement, js_ast.SimplifyUnusedExpr(arg, p.isUnbound))
}
if replacement.Data == nil || (originalFlags&exprResultIsUnused) == 0 {
replacement = js_ast.JoinWithComma(replacement, js_ast.Expr{Loc: expr.Loc, Data: js_ast.EUndefinedShared})
}
replacement = js_ast.JoinWithComma(replacement, js_ast.Expr{Loc: expr.Loc, Data: js_ast.EUndefinedShared})
p.printExpr(replacement, level, flags)
p.printExpr(replacement, level, originalFlags)
break
}

// Inline non-mutated identity functions at print time
if (symbolFlags&(js_ast.IsIdentityFunction|js_ast.CouldPotentiallyBeMutated)) == js_ast.IsIdentityFunction && len(e.Args) == 1 {
p.printExpr(e.Args[0], level, flags)
p.printExpr(e.Args[0], level, originalFlags)
break
}
}
Expand Down Expand Up @@ -1565,7 +1570,7 @@ func (p *printer) printExpr(expr js_ast.Expr, level js_ast.L, flags printExprFla
}

case *js_ast.ERequireString:
p.printRequireOrImportExpr(e.ImportRecordIndex, nil, level, flags)
p.printRequireOrImportExpr(e.ImportRecordIndex, nil, level, originalFlags)

case *js_ast.ERequireResolveString:
wrap := level >= js_ast.LNew || (flags&forbidCall) != 0
Expand All @@ -1585,7 +1590,7 @@ func (p *printer) printExpr(expr js_ast.Expr, level js_ast.L, flags printExprFla
if !p.options.RemoveWhitespace {
leadingInteriorComments = e.LeadingInteriorComments
}
p.printRequireOrImportExpr(e.ImportRecordIndex, leadingInteriorComments, level, flags)
p.printRequireOrImportExpr(e.ImportRecordIndex, leadingInteriorComments, level, originalFlags)

case *js_ast.EImportCall:
var leadingInteriorComments []js_ast.Comment
Expand Down Expand Up @@ -2003,7 +2008,7 @@ func (p *printer) printExpr(expr js_ast.Expr, level js_ast.L, flags printExprFla
case *js_ast.EIdentifier:
name := p.renamer.NameForSymbol(e.Ref)
wrap := len(p.js) == p.forOfInitStart && (name == "let" ||
(wasFollowedByOf && (flags&isInsideForAwait) == 0 && name == "async"))
((originalFlags&isFollowedByOf) != 0 && (flags&isInsideForAwait) == 0 && name == "async"))

if wrap {
p.print("(")
Expand Down Expand Up @@ -2998,7 +3003,7 @@ func (p *printer) printStmt(stmt js_ast.Stmt) {
p.printSpace()
p.print("(")
if s.InitOrNil.Data != nil {
p.printForLoopInit(s.InitOrNil, forbidIn)
p.printForLoopInit(s.InitOrNil, forbidIn|exprResultIsUnused)
}
p.print(";")
p.printSpace()
Expand All @@ -3008,7 +3013,7 @@ func (p *printer) printStmt(stmt js_ast.Stmt) {
p.print(";")
p.printSpace()
if s.UpdateOrNil.Data != nil {
p.printExpr(s.UpdateOrNil, js_ast.LLowest, 0)
p.printExpr(s.UpdateOrNil, js_ast.LLowest, exprResultIsUnused)
}
p.print(")")
p.printBody(s.Body)
Expand Down Expand Up @@ -3273,6 +3278,11 @@ func Print(tree js_ast.AST, symbols js_ast.SymbolMap, r renamer.Renamer, options
builder: sourcemap.MakeChunkBuilder(options.InputSourceMap, options.LineOffsetTables),
}

p.isUnbound = func(ref js_ast.Ref) bool {
ref = js_ast.FollowSymbols(symbols, ref)
return symbols.Get(ref).Kind == js_ast.SymbolUnbound
}

// Add the top-level directive if present
if tree.Directive != "" {
p.printIndent()
Expand Down

0 comments on commit 3d66d2a

Please sign in to comment.