package source
import (
)
func ( *token.FileSet, ast.Node, int) ast.Node {
var ast.Node
ast.Inspect(, func( ast.Node) bool {
switch {
case == nil || != nil:
return false
case .Position(.End()).Line == :
if , := .(*ast.FuncLit); {
=
return false
}
}
return true
})
debug("defer line node: %s", debugFormatNode{})
return
}
func ( ast.Node) (ast.Node, error) {
:= collectDefers()
switch len() {
case 0:
return nil, fmt.Errorf("failed to find expression in defer")
case 1:
return [0].Call, nil
default:
return nil, fmt.Errorf(
"ambiguous call expression: multiple (%d) defers in call block",
len())
}
}
func ( ast.Node) []*ast.DeferStmt {
var []*ast.DeferStmt
ast.Inspect(, func( ast.Node) bool {
if , := .(*ast.DeferStmt); {
= append(, )
debug("defer: %s", debugFormatNode{})
return false
}
return true
})
return
}