@@ -35,20 +35,25 @@ private ConcreteGenericMethodAnalysisContext(Cpp2IlMethodRef methodRef, Assembly
35
35
DeclaringAsm = declaringAssembly ;
36
36
BaseMethodContext = ResolveBaseMethod ( methodRef , declaringAssembly . GetTypeByDefinition ( methodRef . DeclaringType ) ! ) ;
37
37
38
+ var genericTypeParameters = ResolveTypeArray ( methodRef . TypeGenericParams , declaringAssembly ) ;
39
+ var genericMethodParameters = ResolveTypeArray ( methodRef . MethodGenericParams , declaringAssembly ) ;
40
+
38
41
for ( var i = 0 ; i < BaseMethodContext . Parameters . Count ; i ++ )
39
42
{
40
43
var parameter = BaseMethodContext . Parameters [ i ] ;
41
44
var parameterType = parameter . ParameterTypeContext ;
42
45
var instantiatedType = GenericInstantiation . Instantiate (
43
46
parameter . ParameterTypeContext ,
44
- ResolveTypeArray ( methodRef . TypeGenericParams , declaringAssembly ) ,
45
- ResolveTypeArray ( methodRef . MethodGenericParams , declaringAssembly ) ) ;
47
+ genericTypeParameters ,
48
+ genericMethodParameters ) ;
46
49
47
50
Parameters . Add ( parameterType == instantiatedType
48
51
? parameter
49
52
: new InjectedParameterAnalysisContext ( parameter . Name , instantiatedType , i , BaseMethodContext ) ) ;
50
53
}
51
54
55
+ InjectedReturnType = GenericInstantiation . Instantiate ( BaseMethodContext . ReturnTypeContext , genericTypeParameters , genericMethodParameters ) ;
56
+
52
57
if ( UnderlyingPointer != 0 )
53
58
rawMethodBody = AppContext . InstructionSet . GetRawBytesForMethod ( this , false ) ;
54
59
}
@@ -64,13 +69,19 @@ private static TypeAnalysisContext ResolveDeclaringType(Cpp2IlMethodRef methodRe
64
69
var baseType = declaringAssembly . AppContext . ResolveContextForType ( methodRef . DeclaringType )
65
70
?? throw new ( $ "Unable to resolve declaring type { methodRef . DeclaringType . FullName } for generic method { methodRef } ") ;
66
71
72
+ if ( methodRef . TypeGenericParams . Length == 0 )
73
+ return baseType ;
74
+
67
75
var genericParams = ResolveTypeArray ( methodRef . TypeGenericParams , declaringAssembly ) ;
68
76
69
77
return new GenericInstanceTypeAnalysisContext ( baseType , genericParams , declaringAssembly ) ;
70
78
}
71
79
72
80
private static TypeAnalysisContext [ ] ResolveTypeArray ( Il2CppTypeReflectionData [ ] array , AssemblyAnalysisContext declaringAssembly )
73
81
{
82
+ if ( array . Length == 0 )
83
+ return [ ] ;
84
+
74
85
var ret = new TypeAnalysisContext [ array . Length ] ;
75
86
for ( var i = 0 ; i < array . Length ; i ++ )
76
87
{
0 commit comments