@@ -432,10 +432,10 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) {
432432 errorf ("%v.%v not in index" , pkg , name )
433433 }
434434
435- r := & importReader {p : p , currPkg : pkg }
435+ r := & importReader {p : p }
436436 r .declReader .Reset (p .declData [off :])
437437
438- r .obj (name )
438+ r .obj (pkg , name )
439439}
440440
441441func (p * iimporter ) stringAt (off uint64 ) string {
@@ -551,7 +551,6 @@ func canReuse(def *types.Named, rhs types.Type) bool {
551551type importReader struct {
552552 p * iimporter
553553 declReader bytes.Reader
554- currPkg * types.Package
555554 prevFile string
556555 prevLine int64
557556 prevColumn int64
@@ -565,7 +564,8 @@ type importReader struct {
565564// for 1.24, but the fix was not worth back-porting).
566565var markBlack = func (name * types.TypeName ) {}
567566
568- func (r * importReader ) obj (name string ) {
567+ // obj decodes and declares the package-level object denoted by (pkg, name).
568+ func (r * importReader ) obj (pkg * types.Package , name string ) {
569569 tag := r .byte ()
570570 pos := r .pos ()
571571
@@ -576,27 +576,27 @@ func (r *importReader) obj(name string) {
576576 tparams = r .tparamList ()
577577 }
578578 typ := r .typ ()
579- obj := aliases .NewAlias (r .p .aliases , pos , r . currPkg , name , typ , tparams )
579+ obj := aliases .NewAlias (r .p .aliases , pos , pkg , name , typ , tparams )
580580 markBlack (obj ) // workaround for golang/go#69912
581581 r .declare (obj )
582582
583583 case constTag :
584584 typ , val := r .value ()
585585
586- r .declare (types .NewConst (pos , r . currPkg , name , typ , val ))
586+ r .declare (types .NewConst (pos , pkg , name , typ , val ))
587587
588588 case funcTag , genericFuncTag :
589589 var tparams []* types.TypeParam
590590 if tag == genericFuncTag {
591591 tparams = r .tparamList ()
592592 }
593- sig := r .signature (nil , nil , tparams )
594- r .declare (types .NewFunc (pos , r . currPkg , name , sig ))
593+ sig := r .signature (pkg , nil , nil , tparams )
594+ r .declare (types .NewFunc (pos , pkg , name , sig ))
595595
596596 case typeTag , genericTypeTag :
597597 // Types can be recursive. We need to setup a stub
598598 // declaration before recursing.
599- obj := types .NewTypeName (pos , r . currPkg , name , nil )
599+ obj := types .NewTypeName (pos , pkg , name , nil )
600600 named := types .NewNamed (obj , nil , nil )
601601
602602 markBlack (obj ) // workaround for golang/go#69912
@@ -616,7 +616,7 @@ func (r *importReader) obj(name string) {
616616 for n := r .uint64 (); n > 0 ; n -- {
617617 mpos := r .pos ()
618618 mname := r .ident ()
619- recv := r .param ()
619+ recv := r .param (pkg )
620620
621621 // If the receiver has any targs, set those as the
622622 // rparams of the method (since those are the
@@ -630,9 +630,9 @@ func (r *importReader) obj(name string) {
630630 rparams [i ] = types .Unalias (targs .At (i )).(* types.TypeParam )
631631 }
632632 }
633- msig := r .signature (recv , rparams , nil )
633+ msig := r .signature (pkg , recv , rparams , nil )
634634
635- named .AddMethod (types .NewFunc (mpos , r . currPkg , mname , msig ))
635+ named .AddMethod (types .NewFunc (mpos , pkg , mname , msig ))
636636 }
637637 }
638638
@@ -644,12 +644,12 @@ func (r *importReader) obj(name string) {
644644 errorf ("unexpected type param type" )
645645 }
646646 name0 := tparamName (name )
647- tn := types .NewTypeName (pos , r . currPkg , name0 , nil )
647+ tn := types .NewTypeName (pos , pkg , name0 , nil )
648648 t := types .NewTypeParam (tn , nil )
649649
650650 // To handle recursive references to the typeparam within its
651651 // bound, save the partial type in tparamIndex before reading the bounds.
652- id := ident {r . currPkg , name }
652+ id := ident {pkg , name }
653653 r .p .tparamIndex [id ] = t
654654 var implicit bool
655655 if r .p .version >= iexportVersionGo1_18 {
@@ -672,7 +672,7 @@ func (r *importReader) obj(name string) {
672672 case varTag :
673673 typ := r .typ ()
674674
675- v := types .NewVar (pos , r . currPkg , name , typ )
675+ v := types .NewVar (pos , pkg , name , typ )
676676 typesinternal .SetVarKind (v , typesinternal .PackageVar )
677677 r .declare (v )
678678
@@ -905,11 +905,11 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
905905 case mapType :
906906 return types .NewMap (r .typ (), r .typ ())
907907 case signatureType :
908- r . currPkg = r .pkg ()
909- return r .signature (nil , nil , nil )
908+ paramPkg : = r .pkg ()
909+ return r .signature (paramPkg , nil , nil , nil )
910910
911911 case structType :
912- r . currPkg = r .pkg ()
912+ fieldPkg : = r .pkg ()
913913
914914 fields := make ([]* types.Var , r .uint64 ())
915915 tags := make ([]string , len (fields ))
@@ -932,7 +932,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
932932 // discussed in iexport.go, this is not correct, but mostly works and is
933933 // preferable to failing (for now at least).
934934 if field == nil {
935- field = types .NewField (fpos , r . currPkg , fname , ftyp , emb )
935+ field = types .NewField (fpos , fieldPkg , fname , ftyp , emb )
936936 }
937937
938938 fields [i ] = field
@@ -941,7 +941,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
941941 return types .NewStruct (fields , tags )
942942
943943 case interfaceType :
944- r . currPkg = r .pkg ()
944+ methodPkg : = r .pkg () // qualifies methods and their param/result vars
945945
946946 embeddeds := make ([]types.Type , r .uint64 ())
947947 for i := range embeddeds {
@@ -963,12 +963,12 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
963963 // don't agree with this.
964964 var recv * types.Var
965965 if base != nil {
966- recv = types .NewVar (token .NoPos , r . currPkg , "" , base )
966+ recv = types .NewVar (token .NoPos , methodPkg , "" , base )
967967 }
968- msig := r .signature (recv , nil , nil )
968+ msig := r .signature (methodPkg , recv , nil , nil )
969969
970970 if method == nil {
971- method = types .NewFunc (mpos , r . currPkg , mname , msig )
971+ method = types .NewFunc (mpos , methodPkg , mname , msig )
972972 }
973973 methods [i ] = method
974974 }
@@ -1049,9 +1049,9 @@ func (r *importReader) objectPathObject() types.Object {
10491049 return obj
10501050}
10511051
1052- func (r * importReader ) signature (recv * types.Var , rparams []* types.TypeParam , tparams []* types.TypeParam ) * types.Signature {
1053- params := r .paramList ()
1054- results := r .paramList ()
1052+ func (r * importReader ) signature (paramPkg * types. Package , recv * types.Var , rparams []* types.TypeParam , tparams []* types.TypeParam ) * types.Signature {
1053+ params := r .paramList (paramPkg )
1054+ results := r .paramList (paramPkg )
10551055 variadic := params .Len () > 0 && r .bool ()
10561056 return types .NewSignatureType (recv , rparams , tparams , params , results , variadic )
10571057}
@@ -1070,19 +1070,19 @@ func (r *importReader) tparamList() []*types.TypeParam {
10701070 return xs
10711071}
10721072
1073- func (r * importReader ) paramList () * types.Tuple {
1073+ func (r * importReader ) paramList (pkg * types. Package ) * types.Tuple {
10741074 xs := make ([]* types.Var , r .uint64 ())
10751075 for i := range xs {
1076- xs [i ] = r .param ()
1076+ xs [i ] = r .param (pkg )
10771077 }
10781078 return types .NewTuple (xs ... )
10791079}
10801080
1081- func (r * importReader ) param () * types.Var {
1081+ func (r * importReader ) param (pkg * types. Package ) * types.Var {
10821082 pos := r .pos ()
10831083 name := r .ident ()
10841084 typ := r .typ ()
1085- return types .NewParam (pos , r . currPkg , name , typ )
1085+ return types .NewParam (pos , pkg , name , typ )
10861086}
10871087
10881088func (r * importReader ) bool () bool {
0 commit comments