]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: simplify noding for struct embedding
authorMatthew Dempsky <mdempsky@google.com>
Thu, 24 Aug 2017 22:36:47 +0000 (15:36 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 25 Aug 2017 08:18:58 +0000 (08:18 +0000)
Since golang.org/cl/31670, we've stopped using the 'embedded' function
for handling struct embeddings within package export data. Now the
only remaining use is for Go source files, which allows for some
substantial simplifications:

1. CenterDot never appears within Go source files, so that logic can
simply be removed.

2. The field name will always be declared in the local package.

Passes toolstash-check.

Change-Id: I59505f62824206dd5de0782918f98fbef6e93224
Reviewed-on: https://go-review.googlesource.com/58790
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/gc/dcl.go
src/cmd/compile/internal/gc/noder.go

index 88dfb397321aed9bc991ada227b281da5dbe908c..6052cd438f65ad9ca026829e6288ae0dd60894a2 100644 (file)
@@ -760,33 +760,6 @@ func tointerface0(t *types.Type, l []*Node) *types.Type {
        return t
 }
 
-func embedded(s *types.Sym, pkg *types.Pkg) *Node {
-       const (
-               CenterDot = 0xB7
-       )
-       // Names sometimes have disambiguation junk
-       // appended after a center dot. Discard it when
-       // making the name for the embedded struct field.
-       name := s.Name
-
-       if i := strings.Index(s.Name, string(CenterDot)); i >= 0 {
-               name = s.Name[:i]
-       }
-
-       var n *Node
-       if exportname(name) {
-               n = newname(lookup(name))
-       } else if s.Pkg == builtinpkg {
-               // The name of embedded builtins belongs to pkg.
-               n = newname(pkg.Lookup(name))
-       } else {
-               n = newname(s.Pkg.Lookup(name))
-       }
-       n = nod(ODCLFIELD, n, oldname(s))
-       n.SetEmbedded(true)
-       return n
-}
-
 func fakeRecv() *Node {
        return anonfield(types.FakeRecvType())
 }
index 5872640ecaa59580d856663c29f0f4fa2bc80ed5..f4089599fe13356c215b6e36f33de39e882a98df 100644 (file)
@@ -689,7 +689,11 @@ func (p *noder) embedded(typ syntax.Expr) *Node {
                }
                typ = op.X
        }
-       n := embedded(p.packname(typ), localpkg)
+
+       sym := p.packname(typ)
+       n := nod(ODCLFIELD, newname(lookup(sym.Name)), oldname(sym))
+       n.SetEmbedded(true)
+
        if isStar {
                n.Right = p.nod(op, OIND, n.Right, nil)
        }