diff --git a/Cpp2IL/AssemblyBuilder.cs b/Cpp2IL/AssemblyBuilder.cs index d08bb917..da7f9022 100644 --- a/Cpp2IL/AssemblyBuilder.cs +++ b/Cpp2IL/AssemblyBuilder.cs @@ -348,7 +348,24 @@ private static List ProcessTypeContents(Il2CppMetadata metadata, if (methodDefinition.HasBody && ilTypeDefinition.BaseType?.FullName != "System.MulticastDelegate") { var ilprocessor = methodDefinition.Body.GetILProcessor(); - ilprocessor.Append(ilprocessor.Create(OpCodes.Nop)); + if (methodDefinition.ReturnType.FullName == "System.Void") + { + ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); + } + else if (methodDefinition.ReturnType.IsValueType) + { + var variable = new VariableDefinition(methodDefinition.ReturnType); + methodDefinition.Body.Variables.Add(variable); + ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloca_S, variable)); + ilprocessor.Append(ilprocessor.Create(OpCodes.Initobj, methodDefinition.ReturnType)); + ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_0)); + ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); + } + else + { + ilprocessor.Append(ilprocessor.Create(OpCodes.Ldnull)); + ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); + } } SharedState.MethodsByIndex.Add(methodId, methodDefinition);