PlatformGeneratorBase.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using dnlib.DotNet;
  2. using HybridCLR.Editor.ABI;
  3. using HybridCLR.Editor.Meta;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Reflection.Emit;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using UnityEngine;
  12. using TypeInfo = HybridCLR.Editor.ABI.TypeInfo;
  13. namespace HybridCLR.Editor.MethodBridge
  14. {
  15. public abstract class PlatformGeneratorBase
  16. {
  17. public abstract PlatformABI PlatformABI { get; }
  18. public abstract void GenerateManaged2NativeMethod(MethodDesc method, List<string> lines);
  19. public abstract void GenerateNative2ManagedMethod(MethodDesc method, List<string> lines);
  20. public abstract void GenerateAdjustThunkMethod(MethodDesc method, List<string> outputLines);
  21. public void GenerateManaged2NativeStub(List<MethodDesc> methods, List<string> lines)
  22. {
  23. lines.Add($@"
  24. Managed2NativeMethodInfo hybridclr::interpreter::g_managed2nativeStub[] =
  25. {{
  26. ");
  27. foreach (var method in methods)
  28. {
  29. lines.Add($"\t{{\"{method.CreateInvokeSigName()}\", __M2N_{method.CreateInvokeSigName()}}},");
  30. }
  31. lines.Add($"\t{{nullptr, nullptr}},");
  32. lines.Add("};");
  33. }
  34. public void GenerateNative2ManagedStub(List<MethodDesc> methods, List<string> lines)
  35. {
  36. lines.Add($@"
  37. Native2ManagedMethodInfo hybridclr::interpreter::g_native2managedStub[] =
  38. {{
  39. ");
  40. foreach (var method in methods)
  41. {
  42. lines.Add($"\t{{\"{method.CreateInvokeSigName()}\", (Il2CppMethodPointer)__N2M_{method.CreateInvokeSigName()}}},");
  43. }
  44. lines.Add($"\t{{nullptr, nullptr}},");
  45. lines.Add("};");
  46. }
  47. public void GenerateAdjustThunkStub(List<MethodDesc> methods, List<string> lines)
  48. {
  49. lines.Add($@"
  50. NativeAdjustThunkMethodInfo hybridclr::interpreter::g_adjustThunkStub[] =
  51. {{
  52. ");
  53. foreach (var method in methods)
  54. {
  55. lines.Add($"\t{{\"{method.CreateInvokeSigName()}\", (Il2CppMethodPointer)__N2M_AdjustorThunk_{method.CreateCallSigName()}}},");
  56. }
  57. lines.Add($"\t{{nullptr, nullptr}},");
  58. lines.Add("};");
  59. }
  60. }
  61. }