var f *Func
if inlineable {
f = sym.Def.Func
- // TODO(gri) re-examine reexportdeplist:
- // Because we can trivially export types
- // in-place, we don't need to collect types
- // inside function bodies in the exportlist.
- // With an adjusted reexportdeplist used only
- // by the binary exporter, we can also avoid
- // the global exportlist.
reexportdeplist(f.Inl)
}
p.funcList = append(p.funcList, f)
var f *Func
if inlineable {
f = mfn.Func
- reexportdeplist(mfn.Func.Inl)
+ reexportdeplist(f.Inl)
}
p.funcList = append(p.funcList, f)
}
return
}
- //print("reexportdep %+hN\n", n);
switch n.Op {
case ONAME:
switch n.Class {
exportlist = append(exportlist, n)
}
}
-
- // Local variables in the bodies need their type.
- case ODCL:
- t := n.Left.Type
-
- if t != Types[t.Etype] && t != idealbool && t != idealstring {
- if t.IsPtr() {
- t = t.Elem()
- }
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
- if Debug['E'] != 0 {
- fmt.Printf("reexport type %v from declaration\n", t.Sym)
- }
- exportlist = append(exportlist, t.Sym.Def)
- }
- }
-
- case OLITERAL:
- t := n.Type
- if t != Types[n.Type.Etype] && t != idealbool && t != idealstring {
- if t.IsPtr() {
- t = t.Elem()
- }
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
- if Debug['E'] != 0 {
- fmt.Printf("reexport literal type %v\n", t.Sym)
- }
- exportlist = append(exportlist, t.Sym.Def)
- }
- }
- fallthrough
-
- case OTYPE:
- if n.Sym != nil && n.Sym.Def != nil && !exportedsym(n.Sym) {
- if Debug['E'] != 0 {
- fmt.Printf("reexport literal/type %v\n", n.Sym)
- }
- exportlist = append(exportlist, n)
- }
-
- // for operations that need a type when rendered, put the type on the export list.
- case OCONV,
- OCONVIFACE,
- OCONVNOP,
- ORUNESTR,
- OARRAYBYTESTR,
- OARRAYRUNESTR,
- OSTRARRAYBYTE,
- OSTRARRAYRUNE,
- ODOTTYPE,
- ODOTTYPE2,
- OSTRUCTLIT,
- OARRAYLIT,
- OSLICELIT,
- OPTRLIT,
- OMAKEMAP,
- OMAKESLICE,
- OMAKECHAN:
- t := n.Type
-
- switch t.Etype {
- case TARRAY, TCHAN, TPTR32, TPTR64, TSLICE:
- if t.Sym == nil {
- t = t.Elem()
- }
- }
- if t != nil && t.Sym != nil && t.Sym.Def != nil && !exportedsym(t.Sym) {
- if Debug['E'] != 0 {
- fmt.Printf("reexport type for expression %v\n", t.Sym)
- }
- exportlist = append(exportlist, t.Sym.Def)
- }
}
reexportdep(n.Left)