diff --git a/Il2CppInterop.Generator/Extensions/ILGeneratorEx.cs b/Il2CppInterop.Generator/Extensions/ILGeneratorEx.cs index 75703336..b0fb265a 100644 --- a/Il2CppInterop.Generator/Extensions/ILGeneratorEx.cs +++ b/Il2CppInterop.Generator/Extensions/ILGeneratorEx.cs @@ -158,7 +158,7 @@ private static void EmitObjectStoreGeneric(ILProcessor body, TypeReference origi public static void EmitObjectToPointer(this ILProcessor body, TypeReference originalType, TypeReference newType, TypeRewriteContext enclosingType, int argumentIndex, bool valueTypeArgument0IsAPointer, bool allowNullable, - bool unboxNonBlittableType, out VariableDefinition? refVariable) + bool unboxNonBlittableType, bool unboxNonBlittableGeneric, out VariableDefinition? refVariable) { // input stack: not used // output stack: IntPtr to either Il2CppObject or IL2CPP value type @@ -167,7 +167,7 @@ public static void EmitObjectToPointer(this ILProcessor body, TypeReference orig if (originalType is GenericParameter) { EmitObjectToPointerGeneric(body, originalType, newType, enclosingType, argumentIndex, - valueTypeArgument0IsAPointer, allowNullable, unboxNonBlittableType); + valueTypeArgument0IsAPointer, allowNullable, unboxNonBlittableGeneric); return; } diff --git a/Il2CppInterop.Generator/Passes/Pass50GenerateMethods.cs b/Il2CppInterop.Generator/Passes/Pass50GenerateMethods.cs index edfed5c5..8844d2af 100644 --- a/Il2CppInterop.Generator/Passes/Pass50GenerateMethods.cs +++ b/Il2CppInterop.Generator/Passes/Pass50GenerateMethods.cs @@ -167,7 +167,7 @@ public static void DoPass(RewriteGlobalContext context) else { bodyBuilder.EmitObjectToPointer(originalMethod.Parameters[i].ParameterType, newParam.ParameterType, - methodRewriteContext.DeclaringType, argOffset + i, false, true, true, out var refVar); + methodRewriteContext.DeclaringType, argOffset + i, false, true, true, false, out var refVar); if (refVar != null) byRefParams.Add((i, refVar)); } @@ -203,7 +203,7 @@ public static void DoPass(RewriteGlobalContext context) bodyBuilder.Emit(OpCodes.Ldc_I4_0); else bodyBuilder.EmitObjectToPointer(originalMethod.DeclaringType, newMethod.DeclaringType, typeContext, 0, - true, false, true, out _); + true, false, true, true, out _); bodyBuilder.Emit(OpCodes.Ldloc, argArray); bodyBuilder.Emit(OpCodes.Ldloca, exceptionLocal); diff --git a/Il2CppInterop.Generator/Utils/FieldAccessorGenerator.cs b/Il2CppInterop.Generator/Utils/FieldAccessorGenerator.cs index 5df48252..3fbc3308 100644 --- a/Il2CppInterop.Generator/Utils/FieldAccessorGenerator.cs +++ b/Il2CppInterop.Generator/Utils/FieldAccessorGenerator.cs @@ -64,7 +64,7 @@ public static void MakeGetter(FieldDefinition field, FieldRewriteContext fieldCo getter.Body.Variables.Add(local0); getterBody.EmitObjectToPointer(fieldContext.DeclaringType.OriginalType, fieldContext.DeclaringType.NewType, - fieldContext.DeclaringType, 0, false, false, false, out _); + fieldContext.DeclaringType, 0, false, false, false, false, out _); getterBody.Emit(OpCodes.Ldsfld, fieldContext.PointerField); getterBody.Emit(OpCodes.Call, imports.IL2CPP_il2cpp_field_get_offset.Value); getterBody.Emit(OpCodes.Add); @@ -94,13 +94,13 @@ public static void MakeSetter(FieldDefinition field, FieldRewriteContext fieldCo { setterBody.Emit(OpCodes.Ldsfld, fieldContext.PointerField); setterBody.EmitObjectToPointer(field.FieldType, property.PropertyType, fieldContext.DeclaringType, 0, false, - true, true, out _); + true, true, true, out _); setterBody.Emit(OpCodes.Call, imports.IL2CPP_il2cpp_field_static_set_value.Value); } else { setterBody.EmitObjectToPointer(fieldContext.DeclaringType.OriginalType, fieldContext.DeclaringType.NewType, - fieldContext.DeclaringType, 0, false, false, false, out _); + fieldContext.DeclaringType, 0, false, false, false, false, out _); setterBody.Emit(OpCodes.Dup); setterBody.Emit(OpCodes.Ldsfld, fieldContext.PointerField); setterBody.Emit(OpCodes.Call, imports.IL2CPP_il2cpp_field_get_offset.Value); diff --git a/Il2CppInterop.Generator/Utils/UnstripGenerator.cs b/Il2CppInterop.Generator/Utils/UnstripGenerator.cs index 9133687a..dabd4801 100644 --- a/Il2CppInterop.Generator/Utils/UnstripGenerator.cs +++ b/Il2CppInterop.Generator/Utils/UnstripGenerator.cs @@ -72,7 +72,7 @@ public static void GenerateInvokerMethodBody(MethodDefinition newMethod, FieldDe else { body.EmitObjectToPointer(param.ParameterType, param.ParameterType, enclosingType, i + argOffset, false, - true, true, out var refVar); + true, true, true, out var refVar); if (refVar != null) { Logger.Instance.LogTrace("Method {NewMethod} has a reference-typed ref parameter, this will be ignored",