mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: skip reexporting types in reexportdep
The binary export format embeds type definitions inline as necessary, so there's no need to add them to exportlist. Also, constants are embedded directly by value, so they can be omitted too. Change-Id: Id1879eb97c298a5a52f615cf9883c346c7f7bd69 Reviewed-on: https://go-review.googlesource.com/36170 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
16dd0624c2
commit
edad59cfae
2 changed files with 1 additions and 81 deletions
|
|
@ -108,7 +108,6 @@ func reexportdep(n *Node) {
|
|||
return
|
||||
}
|
||||
|
||||
//print("reexportdep %+hN\n", n);
|
||||
switch n.Op {
|
||||
case ONAME:
|
||||
switch n.Class {
|
||||
|
|
@ -133,78 +132,6 @@ func reexportdep(n *Node) {
|
|||
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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue