diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2017-08-24 15:36:47 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2017-08-25 08:18:58 +0000 |
| commit | 180bfc4bd49343cb280d1e162a4d326db7b35a6f (patch) | |
| tree | c019f17228fd4cbe9eebff90c676f008ec33cc7a /src | |
| parent | a9f832a6aedbce206d44d099c67448e8aa747690 (diff) | |
| download | go-180bfc4bd49343cb280d1e162a4d326db7b35a6f.tar.xz | |
cmd/compile: simplify noding for struct embedding
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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/dcl.go | 27 | ||||
| -rw-r--r-- | src/cmd/compile/internal/gc/noder.go | 6 |
2 files changed, 5 insertions, 28 deletions
diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go index 88dfb39732..6052cd438f 100644 --- a/src/cmd/compile/internal/gc/dcl.go +++ b/src/cmd/compile/internal/gc/dcl.go @@ -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()) } diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index 5872640eca..f4089599fe 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -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) } |
