mirror of
https://github.com/golang/go
synced 2024-11-18 03:54:50 -07: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
@ -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…
Reference in New Issue
Block a user