diff options
| author | Daniel Martà <mvdan@mvdan.cc> | 2022-04-21 14:17:40 +0100 |
|---|---|---|
| committer | Daniel Martà <mvdan@mvdan.cc> | 2022-08-23 18:54:32 +0000 |
| commit | ef22285f31ab16ff6751418705b8a7df8e0d661f (patch) | |
| tree | 110375ac9fc1d9f9bcb21e1dbbc3da0ccef96eb2 /src/cmd | |
| parent | 7f632f76db65f28038b8797fbfe5e15a9f63e387 (diff) | |
| download | go-ef22285f31ab16ff6751418705b8a7df8e0d661f.tar.xz | |
all: use go/parser.SkipObjectResolution in more places
None of cgo, "go test", nor srcimporter make use of go/ast's object
resolution via go/ast.Object. As such, we can skip that work during
parse time, which should save some CPU time.
We don't have any benchmark numbers, as none of the three packages have
any usable benchmarks, but we measured gofmt to be about 5% faster
thanks to this tweak in https://go.dev/cl/401454.
These three packages are quite different to gofmt, but one can expect
similar speed-ups in the 1-5% range.
Two notable exceptions, which do make use of go/ast.Object, are cmd/fix
and cmd/doc - we do not modify those here.
See #46485.
Change-Id: Ie3e65600d4790641c4e4d6f1c379be477fa02cee
Reviewed-on: https://go-review.googlesource.com/c/go/+/401455
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/cgo/ast.go | 4 | ||||
| -rw-r--r-- | src/cmd/go/internal/load/test.go | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go index 28879e349c..c419699cb1 100644 --- a/src/cmd/cgo/ast.go +++ b/src/cmd/cgo/ast.go @@ -52,8 +52,8 @@ func (f *File) ParseGo(abspath string, src []byte) { // and reprinting. // In cgo mode, we ignore ast2 and just apply edits directly // the text behind ast1. In godefs mode we modify and print ast2. - ast1 := parse(abspath, src, parser.ParseComments) - ast2 := parse(abspath, src, 0) + ast1 := parse(abspath, src, parser.SkipObjectResolution|parser.ParseComments) + ast2 := parse(abspath, src, parser.SkipObjectResolution) f.Package = ast1.Name.Name f.Name = make(map[string]*Name) diff --git a/src/cmd/go/internal/load/test.go b/src/cmd/go/internal/load/test.go index 3780f358f4..1abefd8ad1 100644 --- a/src/cmd/go/internal/load/test.go +++ b/src/cmd/go/internal/load/test.go @@ -611,7 +611,7 @@ func (t *testFuncs) load(filename, pkg string, doImport, seen *bool) error { return err } defer src.Close() - f, err := parser.ParseFile(testFileSet, filename, src, parser.ParseComments) + f, err := parser.ParseFile(testFileSet, filename, src, parser.ParseComments|parser.SkipObjectResolution) if err != nil { return err } |
