Commit Graph

2 Commits

Author SHA1 Message Date
Agniva De Sarker 158f3dcaf6 go/ast/inspector: fix a small typo
Change-Id: Ifa677f0b0cd1cc345ce65eceacae4413a5644646
Reviewed-on: https://go-review.googlesource.com/c/157300
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-01-10 14:16:07 +00:00
Alan Donovan b3c0be4c97 go/ast/inspector: faster (amortized) AST traversals
This new package provides helper functions for traversal over the
syntax trees of a package, including node filtering by type, and
materialization of the traversal stack.

During construction, the inspector does a complete traversal and
builds a list of push/pop events and their node type. Subsequent
method calls that request a traversal scan this list, rather than walk
the AST, and perform type filtering using efficient bit sets.

Experiments suggest the inspector's traversals are about 2.5x faster
than ast.Inspect, but it may take around 5 traversals for this benefit
to amortize the inspector's construction cost.

This design is well-suited to the ongoing reworking of cmd/vet (see
docs.google.com/document/d/1-azPLXaLgTCKeKDNg0HVMq2ovMlD-e7n1ZHzZVzOlJk),
which historically made a single pass over the ASTs but is being
replaced by a design that requires a separate pass for each analysis.

Change-Id: I9a67aed6a3bf948076641d96447860d97ede67b4
Reviewed-on: https://go-review.googlesource.com/135655
Reviewed-by: Robert Griesemer <gri@golang.org>
2018-09-28 18:13:43 +00:00