@@ -637,6 +637,10 @@ func (p *Parser) convertSignature(u types.Universe, t *gotypes.Signature) *types
637637
638638// walkType adds the type, and any necessary child types.
639639func (p * Parser ) walkType (u types.Universe , useName * types.Name , in gotypes.Type ) * types.Type {
640+ var out * types.Type
641+ defer func () {
642+ out = out .NewMultiVerse (u )
643+ }()
640644 // Most of the cases are underlying types of the named type.
641645 name := goNameToName (in .String ())
642646 if useName != nil {
@@ -645,13 +649,13 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
645649
646650 // Handle alias types conditionally on go1.22+.
647651 // Inline this once the minimum supported version is go1.22
648- if out : = p .walkAliasType (u , in ); out != nil {
652+ if out = p .walkAliasType (u , in ); out != nil {
649653 return out
650654 }
651655
652656 switch t := in .(type ) {
653657 case * gotypes.Struct :
654- out : = u .Type (name )
658+ out = u .Type (name )
655659 out .GoType = in
656660 if out .Kind != types .Unknown {
657661 return out
@@ -670,7 +674,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
670674 }
671675 return out
672676 case * gotypes.Map :
673- out : = u .Type (name )
677+ out = u .Type (name )
674678 out .GoType = in
675679 if out .Kind != types .Unknown {
676680 return out
@@ -680,7 +684,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
680684 out .Key = p .walkType (u , nil , t .Key ())
681685 return out
682686 case * gotypes.Pointer :
683- out : = u .Type (name )
687+ out = u .Type (name )
684688 out .GoType = in
685689 if out .Kind != types .Unknown {
686690 return out
@@ -689,7 +693,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
689693 out .Elem = p .walkType (u , nil , t .Elem ())
690694 return out
691695 case * gotypes.Slice :
692- out : = u .Type (name )
696+ out = u .Type (name )
693697 out .GoType = in
694698 if out .Kind != types .Unknown {
695699 return out
@@ -698,7 +702,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
698702 out .Elem = p .walkType (u , nil , t .Elem ())
699703 return out
700704 case * gotypes.Array :
701- out : = u .Type (name )
705+ out = u .Type (name )
702706 out .GoType = in
703707 if out .Kind != types .Unknown {
704708 return out
@@ -708,7 +712,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
708712 out .Len = in .(* gotypes.Array ).Len ()
709713 return out
710714 case * gotypes.Chan :
711- out : = u .Type (name )
715+ out = u .Type (name )
712716 out .GoType = in
713717 if out .Kind != types .Unknown {
714718 return out
@@ -719,7 +723,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
719723 // cannot be properly written.
720724 return out
721725 case * gotypes.Basic :
722- out : = u .Type (types.Name {
726+ out = u .Type (types.Name {
723727 Package : "" , // This is a magic package name in the Universe.
724728 Name : t .Name (),
725729 })
@@ -730,7 +734,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
730734 out .Kind = types .Unsupported
731735 return out
732736 case * gotypes.Signature :
733- out : = u .Type (name )
737+ out = u .Type (name )
734738 out .GoType = in
735739 if out .Kind != types .Unknown {
736740 return out
@@ -739,7 +743,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
739743 out .Signature = p .convertSignature (u , t )
740744 return out
741745 case * gotypes.Interface :
742- out : = u .Type (name )
746+ out = u .Type (name )
743747 out .GoType = in
744748 if out .Kind != types .Unknown {
745749 return out
@@ -758,7 +762,6 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
758762 }
759763 return out
760764 case * gotypes.Named :
761- var out * types.Type
762765 switch t .Underlying ().(type ) {
763766 case * gotypes.Named , * gotypes.Basic , * gotypes.Map , * gotypes.Slice :
764767 name := goNameToName (t .String ())
@@ -785,7 +788,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
785788 name .Name = fmt .Sprintf ("%s[%s]" , strings .SplitN (name .Name , "[" , 2 )[0 ], strings .Join (tpNames , "," ))
786789 }
787790
788- if out : = u .Type (name ); out .Kind != types .Unknown {
791+ if out = u .Type (name ); out .Kind != types .Unknown {
789792 out .GoType = in
790793 return out // short circuit if we've already made this.
791794 }
@@ -797,7 +800,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
797800 // "feature" for users. This flattens those types
798801 // together.
799802 name := goNameToName (t .String ())
800- if out : = u .Type (name ); out .Kind != types .Unknown {
803+ if out = u .Type (name ); out .Kind != types .Unknown {
801804 return out // short circuit if we've already made this.
802805 }
803806 out = p .walkType (u , & name , t .Underlying ())
@@ -827,7 +830,7 @@ func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type
827830 Kind : types .TypeParam ,
828831 }
829832 default :
830- out : = u .Type (name )
833+ out = u .Type (name )
831834 out .GoType = in
832835 if out .Kind != types .Unknown {
833836 return out
0 commit comments