Skip to content

Commit d8833d3

Browse files
committed
Core: Fix possible exception when injecting method with parameter/s
1 parent ae542ed commit d8833d3

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

Cpp2IL.Core/Model/Contexts/ConcreteGenericMethodAnalysisContext.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ private ConcreteGenericMethodAnalysisContext(Cpp2IlMethodRef methodRef, Assembly
3535
DeclaringAsm = declaringAssembly;
3636
BaseMethodContext = ResolveBaseMethod(methodRef, declaringAssembly.GetTypeByDefinition(methodRef.DeclaringType)!);
3737

38-
foreach (var parameter in BaseMethodContext.Parameters)
38+
for (var i = 0; i < BaseMethodContext.Parameters.Count; i++)
3939
{
40+
var parameter = BaseMethodContext.Parameters[i];
4041
var parameterType = parameter.ParameterTypeContext;
4142
var instantiatedType = GenericInstantiation.Instantiate(
4243
parameter.ParameterTypeContext,
@@ -45,7 +46,7 @@ private ConcreteGenericMethodAnalysisContext(Cpp2IlMethodRef methodRef, Assembly
4546

4647
Parameters.Add(parameterType == instantiatedType
4748
? parameter
48-
: new InjectedParameterAnalysisContext(parameter.Name, instantiatedType, BaseMethodContext));
49+
: new InjectedParameterAnalysisContext(parameter.Name, instantiatedType, i, BaseMethodContext));
4950
}
5051

5152
if (UnderlyingPointer != 0)

Cpp2IL.Core/Model/Contexts/InjectedMethodAnalysisContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public InjectedMethodAnalysisContext(TypeAnalysisContext parent, string name, bo
2424
var injectedParameterType = injectedParameterTypes[i];
2525
var injectedParameterName = injectedParameterNames?[i];
2626

27-
Parameters.Add(new InjectedParameterAnalysisContext(injectedParameterName, injectedParameterType, this));
27+
Parameters.Add(new InjectedParameterAnalysisContext(injectedParameterName, injectedParameterType, i, this));
2828
}
2929
}
3030
}

Cpp2IL.Core/Model/Contexts/InjectedParameterAnalysisContext.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ public class InjectedParameterAnalysisContext : ParameterAnalysisContext
99

1010
public override bool IsRef => false; //For now
1111

12-
public InjectedParameterAnalysisContext(string? name, Il2CppType type, MethodAnalysisContext declaringMethod)
13-
: this(name, declaringMethod.DeclaringType!.DeclaringAssembly.ResolveIl2CppType(type) ?? throw new($"Type {type} could not be resolved."), declaringMethod)
12+
public InjectedParameterAnalysisContext(string? name, Il2CppType type, int paramIndex, MethodAnalysisContext declaringMethod)
13+
: this(name, declaringMethod.DeclaringType!.DeclaringAssembly.ResolveIl2CppType(type) ?? throw new($"Type {type} could not be resolved."), paramIndex, declaringMethod)
1414
{
1515
}
1616

17-
public InjectedParameterAnalysisContext(string? name, TypeAnalysisContext typeContext, MethodAnalysisContext declaringMethod) : base(null, 0, declaringMethod)
17+
public InjectedParameterAnalysisContext(string? name, TypeAnalysisContext typeContext, int paramIndex, MethodAnalysisContext declaringMethod) : base(null, paramIndex, declaringMethod)
1818
{
19-
OverrideName = name;
19+
OverrideName = name ?? $"param_{paramIndex}";
2020
ParameterTypeContext = typeContext;
2121
}
2222
}

0 commit comments

Comments
 (0)