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 
}