From 3b7b0d8b9d304fcbc4b85012f48ca2790918f146 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Wed, 5 Feb 2020 11:08:54 +0100 Subject: [PATCH] Output: Generate dummy private fields for ref return methods (CS8156) --- Il2CppDumper/Il2CppCSharpDumper.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Il2CppDumper/Il2CppCSharpDumper.cs b/Il2CppDumper/Il2CppCSharpDumper.cs index 2b32d7f..2e68811 100644 --- a/Il2CppDumper/Il2CppCSharpDumper.cs +++ b/Il2CppDumper/Il2CppCSharpDumper.cs @@ -7,6 +7,7 @@ using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; +using System.Reflection.Metadata.Ecma335; using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Text.RegularExpressions; @@ -631,11 +632,19 @@ namespace Il2CppInspector // No return type { ReturnType: var retType } when retType.FullName == "System.Void" => " {}", - // Return type + // Ref return type + { ReturnType: var retType } when retType.IsByRef => " => ref _refReturnTypeFor" + method.CSharpName + ";", + + // Regular return type _ => " => default;" }; writer.Append(methodBody + (!SuppressMetadata && method.VirtualAddress != null ? $" // {method.VirtualAddress.ToAddressString()}" : "") + "\n"); + + // Ref return type requires us to invent a field + if (method.ReturnType.IsByRef) + writer.Append($"{prefix}\tprivate {method.ReturnType.GetScopedCSharpName(scope)} _refReturnTypeFor{method.CSharpName};\n"); + return writer.ToString(); } }