From c9e2fdb5909373d57278bde39f83bf8eafa82637 Mon Sep 17 00:00:00 2001 From: Evan Wallace Date: Sat, 2 Apr 2022 00:09:51 -0400 Subject: [PATCH] fix some generated temporary use counts --- internal/js_parser/js_parser.go | 14 +++++++++----- internal/js_parser/js_parser_lower.go | 5 +++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/internal/js_parser/js_parser.go b/internal/js_parser/js_parser.go index a5727b44b06..0b4c472ae08 100644 --- a/internal/js_parser/js_parser.go +++ b/internal/js_parser/js_parser.go @@ -7303,14 +7303,16 @@ func (p *parser) visitStmtsAndPrependTempRefs(stmts []js_ast.Stmt, opts prependT } // Prepend the generated temporary variables to the beginning of the statement list - if len(p.tempRefsToDeclare) > 0 { - decls := []js_ast.Decl{} - for _, temp := range p.tempRefsToDeclare { + decls := []js_ast.Decl{} + for _, temp := range p.tempRefsToDeclare { + if p.symbols[temp.ref.InnerIndex].UseCountEstimate > 0 { decls = append(decls, js_ast.Decl{Binding: js_ast.Binding{Data: &js_ast.BIdentifier{Ref: temp.ref}}, ValueOrNil: temp.valueOrNil}) p.recordDeclaredSymbol(temp.ref) } + } - // If the first statement is a super() call, make sure it stays that way + // If the first statement is a super() call, make sure it stays that way + if len(decls) > 0 { stmt := js_ast.Stmt{Data: &js_ast.SLocal{Kind: js_ast.LocalVar, Decls: decls}} if len(stmts) > 0 && js_ast.IsSuperCall(stmts[0]) { stmts = append([]js_ast.Stmt{stmts[0], stmt}, stmts[1:]...) @@ -13720,7 +13722,9 @@ func (p *parser) handleIdentifier(loc logger.Loc, e *js_ast.EIdentifier, opts id isInsideUnsupportedArrow := p.fnOrArrowDataVisit.isArrow && p.options.unsupportedJSFeatures.Has(compat.Arrow) isInsideUnsupportedAsyncArrow := p.fnOnlyDataVisit.isInsideAsyncArrowFn && p.options.unsupportedJSFeatures.Has(compat.AsyncAwait) if isInsideUnsupportedArrow || isInsideUnsupportedAsyncArrow { - return js_ast.Expr{Loc: loc, Data: &js_ast.EIdentifier{Ref: p.captureArguments()}} + argumentsRef := p.captureArguments() + p.recordUsage(argumentsRef) + return js_ast.Expr{Loc: loc, Data: &js_ast.EIdentifier{Ref: argumentsRef}} } } diff --git a/internal/js_parser/js_parser_lower.go b/internal/js_parser/js_parser_lower.go index 11d0534fa13..a551268d23a 100644 --- a/internal/js_parser/js_parser_lower.go +++ b/internal/js_parser/js_parser_lower.go @@ -1300,6 +1300,7 @@ func (p *parser) lowerObjectRestInForLoopInit(init js_ast.Stmt, body *js_ast.Stm if exprHasObjectRest(s.Value) { ref := p.generateTempRef(tempRefNeedsDeclare, "") if expr, ok := p.lowerAssign(s.Value, js_ast.Expr{Loc: init.Loc, Data: &js_ast.EIdentifier{Ref: ref}}, objRestReturnValueIsUnused); ok { + p.recordUsage(ref) s.Value.Data = &js_ast.EIdentifier{Ref: ref} bodyPrefixStmt = js_ast.Stmt{Loc: expr.Loc, Data: &js_ast.SExpr{Value: expr}} } @@ -2213,6 +2214,7 @@ func (p *parser) lowerClass(stmt js_ast.Stmt, expr js_ast.Expr, shadowRef js_ast } else if _, ok := prop.Key.Data.(*js_ast.EString); !ok { // Store the key in a temporary so we can assign to it later ref := p.generateTempRef(tempRefNeedsDeclare, "") + p.recordUsage(ref) computedPropertyCache = js_ast.JoinWithComma(computedPropertyCache, js_ast.Assign(js_ast.Expr{Loc: prop.Key.Loc, Data: &js_ast.EIdentifier{Ref: ref}}, prop.Key)) prop.Key = js_ast.Expr{Loc: prop.Key.Loc, Data: &js_ast.EIdentifier{Ref: ref}} @@ -2429,6 +2431,7 @@ func (p *parser) lowerClass(stmt js_ast.Stmt, expr js_ast.Expr, shadowRef js_ast } else { p.symbols[methodRef.InnerIndex].Link = p.privateGetters[private.Ref] } + p.recordUsage(methodRef) privateMembers = append(privateMembers, js_ast.Assign( js_ast.Expr{Loc: loc, Data: &js_ast.EIdentifier{Ref: methodRef}}, prop.ValueOrNil, @@ -2815,6 +2818,8 @@ func (p *parser) lowerTemplateLiteral(loc logger.Loc, e *js_ast.ETemplate) js_as // Cache it in a temporary object (required by the specification) tempRef := p.generateTopLevelTempRef() + p.recordUsage(tempRef) + p.recordUsage(tempRef) args[0] = js_ast.Expr{Loc: loc, Data: &js_ast.EBinary{ Op: js_ast.BinOpLogicalOr, Left: js_ast.Expr{Loc: loc, Data: &js_ast.EIdentifier{Ref: tempRef}},