From 03f610f528747f4b43c5ecf161e04861b3e2d07d Mon Sep 17 00:00:00 2001 From: triton <joao@tritao.eu> Date: Tue, 8 Sep 2015 01:06:02 +0100 Subject: [PATCH] Factor the saving of original vtables pointers to its method. --- .../Generators/CSharp/CSharpTextTemplate.cs | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 0d3f680b..1c234e53 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1324,9 +1324,33 @@ namespace CppSharp.Generators.CSharp PopBlock(NewLineKind.BeforeNextBlock); } + private void GenerateSaveOriginalVTables(Class @class) + { + WriteLine("void SaveOriginalVTables(global::System.IntPtr instance)"); + WriteStartBraceIndent(); + + WriteLine("var native = (Internal*)instance.ToPointer();"); + NewLine(); + + WriteLine("if (__OriginalVTables == null)"); + WriteStartBraceIndent(); + + if (Options.IsMicrosoftAbi) + SaveOriginalVTablePointersMS(@class); + else + SaveOriginalVTablePointersItanium(); + + WriteCloseBraceIndent(); + + WriteCloseBraceIndent(); + NewLine(); + } + private void GenerateVTableClassSetup(Class @class, string dictionary, IList<VTableComponent> entries, IList<VTableComponent> wrappedEntries) { + GenerateSaveOriginalVTables(@class); + WriteLine("void SetupVTables(global::System.IntPtr instance)"); WriteStartBraceIndent(); @@ -1345,20 +1369,7 @@ namespace CppSharp.Generators.CSharp NewLine(); // Save the original vftable pointers. - WriteLine("if (__OriginalVTables == null)"); - WriteStartBraceIndent(); - - switch (Driver.Options.Abi) - { - case CppAbi.Microsoft: - SaveOriginalVTablePointersMS(@class); - break; - case CppAbi.Itanium: - case CppAbi.ARM: - SaveOriginalVTablePointersItanium(); - break; - } - WriteCloseBraceIndent(); + WriteLine("SaveOriginalVTables(instance);"); NewLine(); // Get the _Thunks