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>
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:
}
func tointerface(l []*Node) *Type {
+ if len(l) == 0 {
+ return Types[TINTER]
+ }
t := typ(TINTER)
tointerface0(t, l)
return t