77
88namespace HybridCLR . Editor . Meta
99{
10- /// <summary>
11- /// Replaces generic type/method var with its generic argument
12- /// </summary>
13- public sealed class GenericArgumentContext
10+
11+ public class GenericArgumentContext
1412 {
15- List < TypeSig > typeArgsStack = new List < TypeSig > ( ) ;
16- List < TypeSig > methodArgsStack = new List < TypeSig > ( ) ;
13+ private readonly List < TypeSig > typeArgsStack ;
14+ private readonly List < TypeSig > methodArgsStack ;
1715
1816 public GenericArgumentContext ( List < TypeSig > typeArgsStack , List < TypeSig > methodArgsStack )
1917 {
2018 this . typeArgsStack = typeArgsStack ;
2119 this . methodArgsStack = methodArgsStack ;
2220 }
2321
24-
25-
26- /// <summary>
27- /// Replaces a generic type/method var with its generic argument (if any). If
28- /// <paramref name="typeSig"/> isn't a generic type/method var or if it can't
29- /// be resolved, it itself is returned. Else the resolved type is returned.
30- /// </summary>
31- /// <param name="typeSig">Type signature</param>
32- /// <returns>New <see cref="TypeSig"/> which is never <c>null</c> unless
33- /// <paramref name="typeSig"/> is <c>null</c></returns>
3422 public TypeSig Resolve ( TypeSig typeSig )
3523 {
3624 if ( ! typeSig . ContainsGenericParameter )
@@ -41,9 +29,9 @@ public TypeSig Resolve(TypeSig typeSig)
4129 switch ( typeSig . ElementType )
4230 {
4331 case ElementType . Ptr : return new PtrSig ( Resolve ( typeSig . Next ) ) ;
44- case ElementType . ByRef : return new PtrSig ( Resolve ( typeSig . Next ) ) ;
32+ case ElementType . ByRef : return new ByRefSig ( Resolve ( typeSig . Next ) ) ;
4533
46- case ElementType . SZArray : return new PtrSig ( Resolve ( typeSig . Next ) ) ;
34+ case ElementType . SZArray : return new SZArraySig ( Resolve ( typeSig . Next ) ) ;
4735 case ElementType . Array :
4836 {
4937 var ara = ( ArraySig ) typeSig ;
@@ -53,7 +41,7 @@ public TypeSig Resolve(TypeSig typeSig)
5341 case ElementType . Var :
5442 {
5543 GenericVar genericVar = ( GenericVar ) typeSig ;
56- var newSig = Resolve ( typeArgsStack , genericVar . Number , true ) ;
44+ var newSig = Resolve ( typeArgsStack , genericVar . Number ) ;
5745 if ( newSig == null )
5846 {
5947 throw new Exception ( ) ;
@@ -64,7 +52,7 @@ public TypeSig Resolve(TypeSig typeSig)
6452 case ElementType . MVar :
6553 {
6654 GenericMVar genericVar = ( GenericMVar ) typeSig ;
67- var newSig = Resolve ( methodArgsStack , genericVar . Number , true ) ;
55+ var newSig = Resolve ( methodArgsStack , genericVar . Number ) ;
6856 if ( newSig == null )
6957 {
7058 throw new Exception ( ) ;
@@ -113,13 +101,9 @@ public TypeSig Resolve(TypeSig typeSig)
113101 }
114102 }
115103
116- private TypeSig Resolve ( List < TypeSig > args , uint number , bool isTypeVar )
104+ private TypeSig Resolve ( List < TypeSig > args , uint number )
117105 {
118- var typeSig = args [ ( int ) number ] ;
119- var gvar = typeSig as GenericSig ;
120- if ( gvar is null || gvar . IsTypeVar != isTypeVar )
121- return typeSig ;
122- return gvar ;
106+ return args [ ( int ) number ] ;
123107 }
124108 }
125109
0 commit comments