Output: Generate dummy private fields for ref return methods (CS8156)

This commit is contained in:
Katy Coe
2020-02-05 11:08:54 +01:00
parent 3981557601
commit 3b7b0d8b9d

View File

@@ -7,6 +7,7 @@ using System.ComponentModel;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.InteropServices.ComTypes; using System.Runtime.InteropServices.ComTypes;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@@ -631,11 +632,19 @@ namespace Il2CppInspector
// No return type // No return type
{ ReturnType: var retType } when retType.FullName == "System.Void" => " {}", { 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;" _ => " => default;"
}; };
writer.Append(methodBody + (!SuppressMetadata && method.VirtualAddress != null ? $" // {method.VirtualAddress.ToAddressString()}" : "") + "\n"); 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(); return writer.ToString();
} }
} }