From: Rob Findley Date: Wed, 17 Mar 2021 16:42:19 +0000 (-0400) Subject: go/parser: avoid formatting a panic message if an assertion succeeds X-Git-Tag: go1.17beta1~1084 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0bd308ff27822378dc2db77d6dd0ad3c15ed2e08;p=gostls13.git go/parser: avoid formatting a panic message if an assertion succeeds tryResolve is an extremely hot method on the parser. Eliminating this formatting led to a 20% performance improvement in BenchmarkParse. Change-Id: Idf8850404bd72d45d1351356427a85086422ea68 Reviewed-on: https://go-review.googlesource.com/c/go/+/302629 Trust: Robert Findley Trust: Robert Griesemer Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- diff --git a/src/go/parser/parser.go b/src/go/parser/parser.go index ed1867b3b3..b86d6bad46 100644 --- a/src/go/parser/parser.go +++ b/src/go/parser/parser.go @@ -181,7 +181,10 @@ func (p *parser) tryResolve(x ast.Expr, collectUnresolved bool) { if ident == nil { return } - assert(ident.Obj == nil, fmt.Sprintf("identifier %s already declared or resolved", ident.Name)) + // Don't use assert here, to avoid needless formatting of the message below. + if ident.Obj != nil { + panic(fmt.Sprintf("identifier %s already declared or resolved", ident.Name)) + } if ident.Name == "_" { return }