case typePointer:
return types2.NewPointer(r.typ())
case typeSignature:
- return r.signature(nil)
+ return r.signature(nil, nil, nil)
case typeSlice:
return types2.NewSlice(r.typ())
case typeStruct:
for i := range methods {
pos := r.pos()
pkg, name := r.selector()
- mtyp := r.signature(nil)
+ mtyp := r.signature(nil, nil, nil)
methods[i] = types2.NewFunc(pos, pkg, name, mtyp)
}
return types2.NewInterfaceType(methods, embeddeds)
}
-func (r *reader2) signature(recv *types2.Var) *types2.Signature {
+func (r *reader2) signature(recv *types2.Var, rtparams, tparams []*types2.TypeParam) *types2.Signature {
r.sync(syncSignature)
params := r.params()
results := r.params()
variadic := r.bool()
- return types2.NewSignatureType(recv, nil, nil, params, results, variadic)
+ return types2.NewSignatureType(recv, rtparams, tparams, params, results, variadic)
}
func (r *reader2) params() *types2.Tuple {
case objFunc:
pos := r.pos()
tparams := r.typeParamNames()
- sig := r.signature(nil)
- sig.SetTypeParams(tparams)
+ sig := r.signature(nil, nil, tparams)
return types2.NewFunc(pos, objPkg, objName, sig)
case objType:
pos := r.pos()
pkg, name := r.selector()
- rparams := r.typeParamNames()
- sig := r.signature(r.param())
- sig.SetRecvTypeParams(rparams)
+ rtparams := r.typeParamNames()
+ sig := r.signature(r.param(), rtparams, nil)
_ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go.
return types2.NewFunc(pos, pkg, name, sig)