mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: canonicalize empty interface types
Mapping all empty interfaces onto the same Type
allows better reuse of the ptrTo and sliceOf
Type caches for *interface{} and []interface{}.
This has little compiler performance impact now,
but it will be helpful in the future,
when we will eagerly populate some of those caches.
Passes toolstash-check.
Change-Id: I17daee599a129b0b2f5f3025c1be43d569d6782c
Reviewed-on: https://go-review.googlesource.com/38344
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
872db79989
commit
62947bedd2
2 changed files with 9 additions and 2 deletions
|
|
@ -526,11 +526,15 @@ func (p *importer) typ() *Type {
|
|||
functypefield0(t, nil, params, result)
|
||||
|
||||
case interfaceTag:
|
||||
t = p.newtyp(TINTER)
|
||||
if p.int() != 0 {
|
||||
formatErrorf("unexpected embedded interface")
|
||||
}
|
||||
t.SetFields(p.methodList())
|
||||
if ml := p.methodList(); len(ml) == 0 {
|
||||
t = Types[TINTER]
|
||||
} else {
|
||||
t = p.newtyp(TINTER)
|
||||
t.SetFields(ml)
|
||||
}
|
||||
checkwidth(t)
|
||||
|
||||
case mapTag:
|
||||
|
|
|
|||
|
|
@ -860,6 +860,9 @@ func interfacefield(n *Node) *Field {
|
|||
}
|
||||
|
||||
func tointerface(l []*Node) *Type {
|
||||
if len(l) == 0 {
|
||||
return Types[TINTER]
|
||||
}
|
||||
t := typ(TINTER)
|
||||
tointerface0(t, l)
|
||||
return t
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue