From: Robert Griesemer Date: Mon, 1 Nov 2010 22:06:34 +0000 (-0700) Subject: go/ast: add Inspect function for easy AST inspection w/o a visitor X-Git-Tag: weekly.2010-11-02~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9384fdc96aca890c11ff964738f4c9a9bb6ac8dd;p=gostls13.git go/ast: add Inspect function for easy AST inspection w/o a visitor R=rsc CC=golang-dev https://golang.org/cl/2770044 --- diff --git a/src/pkg/go/ast/walk.go b/src/pkg/go/ast/walk.go index 6c9837a01d..296da5652d 100644 --- a/src/pkg/go/ast/walk.go +++ b/src/pkg/go/ast/walk.go @@ -321,3 +321,22 @@ func Walk(v Visitor, node interface{}) { v.Visit(nil) } + + +type inspector func(node interface{}) bool + +func (f inspector) Visit(node interface{}) Visitor { + if node != nil && f(node) { + return f + } + return nil +} + + +// Inspect traverses an AST in depth-first order: If node != nil, it +// invokes f(node). If f returns true, inspect invokes f for all the +// non-nil children of node, recursively. +// +func Inspect(ast interface{}, f func(node interface{}) bool) { + Walk(inspector(f), ast) +}