aboutsummaryrefslogtreecommitdiff
path: root/src/go/parser/parser.go
diff options
context:
space:
mode:
authorRob Findley <rfindley@google.com>2021-03-17 12:42:19 -0400
committerRobert Findley <rfindley@google.com>2021-03-17 17:13:50 +0000
commit0bd308ff27822378dc2db77d6dd0ad3c15ed2e08 (patch)
tree2cc925ca93eb1a309ca7ecb820ebfe2196a2eb46 /src/go/parser/parser.go
parent70d54df4f6bd63b0057d718c6fc3fffc0d94bbc1 (diff)
downloadgo-0bd308ff27822378dc2db77d6dd0ad3c15ed2e08.tar.gz
go-0bd308ff27822378dc2db77d6dd0ad3c15ed2e08.zip
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 <rfindley@google.com> Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Findley <rfindley@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/go/parser/parser.go')
-rw-r--r--src/go/parser/parser.go5
1 files changed, 4 insertions, 1 deletions
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
}