func AssignConv(n ir.Node, t *types.Type, context string) ir.Node { … } // LookupNum returns types.LocalPkg.LookupNum(prefix, n). func LookupNum(prefix string, n int) *types.Sym { … } // Given funarg struct list, return list of fn args. func NewFuncParams(origs []*types.Field) []*types.Field { … } // NodAddr returns a node representing &n at base.Pos. func NodAddr(n ir.Node) *ir.AddrExpr { … } // NodAddrAt returns a node representing &n at position pos. func NodAddrAt(pos src.XPos, n ir.Node) *ir.AddrExpr { … } // LinksymAddr returns a new expression that evaluates to the address // of lsym. typ specifies the type of the addressed memory. func LinksymAddr(pos src.XPos, lsym *obj.LSym, typ *types.Type) *ir.AddrExpr { … } func NodNil() ir.Node { … } // AddImplicitDots finds missing fields in obj.field that // will give the shortest unique addressing and // modifies the tree with missing field names. func AddImplicitDots(n *ir.SelectorExpr) *ir.SelectorExpr { … } // CalcMethods calculates all the methods (including embedding) of a non-interface // type t. func CalcMethods(t *types.Type) { … } // adddot1 returns the number of fields or methods named s at depth d in Type t. // If exactly one exists, it will be returned in *save (if save is not nil), // and dotlist will contain the path of embedded fields traversed to find it, // in reverse order. If none exist, more will indicate whether t contains any // embedded fields at depth d, so callers can decide whether to retry at // a greater depth. func adddot1(s *types.Sym, t *types.Type, d int, save **types.Field, ignorecase bool) (c int, more bool) { … } var dotlist … // Convert node n for assignment to type t. func assignconvfn(n ir.Node, t *types.Type, context func() string) ir.Node { … } // Is type src assignment compatible to type dst? // If so, return op code to use in conversion. // If not, return OXXX. In this case, the string return parameter may // hold a reason why. In all other cases, it'll be the empty string. func assignOp(src, dst *types.Type) (ir.Op, string) { … } // Can we convert a value of type src to a value of type dst? // If so, return op code to use in conversion (maybe OCONVNOP). // If not, return OXXX. In this case, the string return parameter may // hold a reason why. In all other cases, it'll be the empty string. // srcConstant indicates whether the value of type src is a constant. func convertOp(srcConstant bool, src, dst *types.Type) (ir.Op, string) { … } type dlist … // dotpath computes the unique shortest explicit selector path to fully qualify // a selection expression x.f, where x is of type t and f is the symbol s. // If no such path exists, dotpath returns nil. // If there are multiple shortest paths to the same depth, ambig is true. func dotpath(s *types.Sym, t *types.Type, save **types.Field, ignorecase bool) (path []dlist, ambig bool) { … } func expand0(t *types.Type) { … } func expand1(t *types.Type, top bool) { … } func ifacelookdot(s *types.Sym, t *types.Type, ignorecase bool) *types.Field { … } // Implements reports whether t implements the interface iface. t can be // an interface, a type parameter, or a concrete type. func Implements(t, iface *types.Type) bool { … } // ImplementsExplain reports whether t implements the interface iface. t can be // an interface, a type parameter, or a concrete type. If t does not implement // iface, a non-empty string is returned explaining why. func ImplementsExplain(t, iface *types.Type) string { … } // implements reports whether t implements the interface iface. t can be // an interface, a type parameter, or a concrete type. If implements returns // false, it stores a method of iface that is not implemented in *m. If the // method name matches but the type is wrong, it additionally stores the type // of the method (on t) in *samename. func implements(t, iface *types.Type, m, samename **types.Field, ptr *int) bool { … } func isptrto(t *types.Type, et types.Kind) bool { … } // lookdot0 returns the number of fields or methods named s associated // with Type t. If exactly one exists, it will be returned in *save // (if save is not nil). func lookdot0(s *types.Sym, t *types.Type, save **types.Field, ignorecase bool) int { … } var slist … type symlink …