// call evaluates a call expressions, including builtin calls. ks // should contain the holes representing where the function callee's // results flows. func (e *escape) call(ks []hole, call ir.Node) { … } // goDeferStmt analyzes a "go" or "defer" statement. func (e *escape) goDeferStmt(n *ir.GoDeferStmt) { … } // rewriteArgument rewrites the argument arg of the given call expression. // fn is the static callee function, if known. func (e *escape) rewriteArgument(arg ir.Node, call *ir.CallExpr, fn *ir.Name) { … } // copyExpr creates and returns a new temporary variable within fn; // appends statements to init to declare and initialize it to expr; // and escape analyzes the data flow. func (e *escape) copyExpr(pos src.XPos, expr ir.Node, init *ir.Nodes) *ir.Name { … } // tagHole returns a hole for evaluating an argument passed to param. // ks should contain the holes representing where the function // callee's results flows. fn is the statically-known callee function, // if any. func (e *escape) tagHole(ks []hole, fn *ir.Name, param *types.Field) hole { … }