// addr evaluates an addressable expression n and returns a hole // that represents storing into the represented location. func (e *escape) addr(n ir.Node) hole { … } func (e *escape) mutate(n ir.Node) { … } func (e *escape) addrs(l ir.Nodes) []hole { … } func (e *escape) assignHeap(src ir.Node, why string, where ir.Node) { … } // assignList evaluates the assignment dsts... = srcs.... func (e *escape) assignList(dsts, srcs []ir.Node, why string, where ir.Node) { … } // reassigned marks the locations associated with the given holes as // reassigned, unless the location represents a variable declared and // assigned exactly once by where. func (e *escape) reassigned(ks []hole, where ir.Node) { … }