Slide 42
Slide 42 text
buildssaパッケージ
■ 静的単一代入形式を構築するAnalyzerを提供
● Analyzer.Requiresフィールドにbuildssa.Analyzer変数を指定
● SSA.SrcFuncsフィールドからソースコード中の関数を取得
42
func run(pass *analysis.Pass) (interface{}, error) {
s := pass.ResultOf[buildssa.Analyzer].(*buildssa.SSA)
for _, f := range s.SrcFuncs {
fmt.Println(f)
for _, b := range f.Blocks {
fmt.Printf("\tBlock %d\n", b.Index)
for _, instr := range b.Instrs {
fmt.Printf("\t\t%[1]T\t%[1]v(%[1]p)\n", instr)
for _, v := range instr.Operands(nil) {
if v != nil { fmt.Printf("\t\t\t%[1]T\t%[1]v(%[1]p)\n", *v) }
}
}
}
}
return nil, nil
}
type SSA struct {
Pkg *ssa.Package
SrcFuncs []*ssa.Function
}