Skip to content

Commit 5341ae2

Browse files
cnzhujieondrajz
andauthored
add package init functions when algo is rta (#199)
Co-authored-by: Ondrej Fabry <[email protected]>
1 parent 7306502 commit 5341ae2

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

Diff for: analysis.go

+29
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,26 @@ func mainPackages(pkgs []*ssa.Package) ([]*ssa.Package, error) {
6060
return mains, nil
6161
}
6262

63+
// initFuncs returns all package init functions
64+
func initFuncs(pkgs []*ssa.Package) ([]*ssa.Function, error) {
65+
var inits []*ssa.Function
66+
for _, p := range pkgs {
67+
if p == nil {
68+
continue
69+
}
70+
for name, member := range p.Members {
71+
fun, ok := member.(*ssa.Function)
72+
if !ok {
73+
continue
74+
}
75+
if name == "init" || strings.HasPrefix(name, "init#") {
76+
inits = append(inits, fun)
77+
}
78+
}
79+
}
80+
return inits, nil
81+
}
82+
6383
//==[ type def/func: analysis ]===============================================
6484
type analysis struct {
6585
opts *renderOpts
@@ -119,6 +139,15 @@ func (a *analysis) DoAnalysis(
119139
for _, main := range mains {
120140
roots = append(roots, main.Func("main"))
121141
}
142+
143+
inits, err := initFuncs(prog.AllPackages())
144+
if err != nil {
145+
return err
146+
}
147+
for _, init := range inits {
148+
roots = append(roots, init)
149+
}
150+
122151
graph = rta.Analyze(roots, true).CallGraph
123152
case CallGraphTypePointer:
124153
mains, err := mainPackages(prog.AllPackages())

0 commit comments

Comments
 (0)