aboutsummaryrefslogtreecommitdiff
path: root/src/go/types/object.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/go/types/object.go')
-rw-r--r--src/go/types/object.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/go/types/object.go b/src/go/types/object.go
index 50346ec691..7266623fbe 100644
--- a/src/go/types/object.go
+++ b/src/go/types/object.go
@@ -230,6 +230,14 @@ func NewTypeName(pos token.Pos, pkg *Package, name string, typ Type) *TypeName {
return &TypeName{object{nil, pos, pkg, name, typ, 0, colorFor(typ), token.NoPos}}
}
+// _NewTypeNameLazy returns a new defined type like NewTypeName, but it
+// lazily calls resolve to finish constructing the Named object.
+func _NewTypeNameLazy(pos token.Pos, pkg *Package, name string, resolve func(named *Named) (tparams []*TypeName, underlying Type, methods []*Func)) *TypeName {
+ obj := NewTypeName(pos, pkg, name, nil)
+ NewNamed(obj, nil, nil).resolve = resolve
+ return obj
+}
+
// IsAlias reports whether obj is an alias name for a type.
func (obj *TypeName) IsAlias() bool {
switch t := obj.typ.(type) {
@@ -421,6 +429,9 @@ func writeObject(buf *bytes.Buffer, obj Object, qf Qualifier) {
if _, ok := typ.(*Basic); ok {
return
}
+ if named, _ := typ.(*Named); named != nil && named.TParams().Len() > 0 {
+ writeTParamList(buf, named.TParams().list(), qf, nil)
+ }
if tname.IsAlias() {
buf.WriteString(" =")
} else {