Browse Source

Factor the saving of original vtables pointers to its method.

pull/552/merge
triton 11 years ago
parent
commit
03f610f528
  1. 39
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

39
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1324,9 +1324,33 @@ namespace CppSharp.Generators.CSharp
PopBlock(NewLineKind.BeforeNextBlock); 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, private void GenerateVTableClassSetup(Class @class, string dictionary,
IList<VTableComponent> entries, IList<VTableComponent> wrappedEntries) IList<VTableComponent> entries, IList<VTableComponent> wrappedEntries)
{ {
GenerateSaveOriginalVTables(@class);
WriteLine("void SetupVTables(global::System.IntPtr instance)"); WriteLine("void SetupVTables(global::System.IntPtr instance)");
WriteStartBraceIndent(); WriteStartBraceIndent();
@ -1345,20 +1369,7 @@ namespace CppSharp.Generators.CSharp
NewLine(); NewLine();
// Save the original vftable pointers. // Save the original vftable pointers.
WriteLine("if (__OriginalVTables == null)"); WriteLine("SaveOriginalVTables(instance);");
WriteStartBraceIndent();
switch (Driver.Options.Abi)
{
case CppAbi.Microsoft:
SaveOriginalVTablePointersMS(@class);
break;
case CppAbi.Itanium:
case CppAbi.ARM:
SaveOriginalVTablePointersItanium();
break;
}
WriteCloseBraceIndent();
NewLine(); NewLine();
// Get the _Thunks // Get the _Thunks

Loading…
Cancel
Save