diff options
| author | Joseph Richey <joerichey@google.com> | 2018-02-11 21:43:56 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-11 21:43:56 -0800 |
| commit | 8b6cbfcca9d1f3fb5b05a91b4ac0bca66f75f19e (patch) | |
| tree | 5f6fdc40c7518bc23a63fdac9a92b516dd0c6d36 /vendor/honnef.co/go/tools/callgraph/static/static.go | |
| parent | aebae1aae2fc61185a8bbc96313d8462727ad202 (diff) | |
| parent | b330463662825a7d7b22efabb2b7a40640d2b18e (diff) | |
Merge pull request #85 from google/depfix
Complete the new Build System
Diffstat (limited to 'vendor/honnef.co/go/tools/callgraph/static/static.go')
| -rw-r--r-- | vendor/honnef.co/go/tools/callgraph/static/static.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/honnef.co/go/tools/callgraph/static/static.go b/vendor/honnef.co/go/tools/callgraph/static/static.go new file mode 100644 index 0000000..5444e84 --- /dev/null +++ b/vendor/honnef.co/go/tools/callgraph/static/static.go @@ -0,0 +1,35 @@ +// Package static computes the call graph of a Go program containing +// only static call edges. +package static // import "honnef.co/go/tools/callgraph/static" + +import ( + "honnef.co/go/tools/callgraph" + "honnef.co/go/tools/ssa" + "honnef.co/go/tools/ssa/ssautil" +) + +// CallGraph computes the call graph of the specified program +// considering only static calls. +// +func CallGraph(prog *ssa.Program) *callgraph.Graph { + cg := callgraph.New(nil) // TODO(adonovan) eliminate concept of rooted callgraph + + // TODO(adonovan): opt: use only a single pass over the ssa.Program. + // TODO(adonovan): opt: this is slower than RTA (perhaps because + // the lower precision means so many edges are allocated)! + for f := range ssautil.AllFunctions(prog) { + fnode := cg.CreateNode(f) + for _, b := range f.Blocks { + for _, instr := range b.Instrs { + if site, ok := instr.(ssa.CallInstruction); ok { + if g := site.Common().StaticCallee(); g != nil { + gnode := cg.CreateNode(g) + callgraph.AddEdge(fnode, site, gnode) + } + } + } + } + } + + return cg +} |