|
|
|
@ -4,6 +4,7 @@ using System.Globalization; |
|
|
|
using System.IO; |
|
|
|
using System.IO; |
|
|
|
using System.Linq; |
|
|
|
using System.Linq; |
|
|
|
using CppSharp.AST; |
|
|
|
using CppSharp.AST; |
|
|
|
|
|
|
|
using CppSharp.Generators.CSharp; |
|
|
|
using CppSharp.Types; |
|
|
|
using CppSharp.Types; |
|
|
|
using Type = CppSharp.AST.Type; |
|
|
|
using Type = CppSharp.AST.Type; |
|
|
|
|
|
|
|
|
|
|
|
@ -134,6 +135,12 @@ namespace CppSharp.Generators.CLI |
|
|
|
GenerateClassConstructor(@class, isIntPtr: false); |
|
|
|
GenerateClassConstructor(@class, isIntPtr: false); |
|
|
|
GenerateClassConstructor(@class, isIntPtr: true); |
|
|
|
GenerateClassConstructor(@class, isIntPtr: true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (@class.IsRefType) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
GenerateClassDestructor(@class); |
|
|
|
|
|
|
|
GenerateClassFinalizer(@class); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (var method in @class.Methods) |
|
|
|
foreach (var method in @class.Methods) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (ASTUtils.CheckIgnoreMethod(method)) |
|
|
|
if (ASTUtils.CheckIgnoreMethod(method)) |
|
|
|
@ -142,27 +149,24 @@ namespace CppSharp.Generators.CLI |
|
|
|
GenerateMethod(method, @class); |
|
|
|
GenerateMethod(method, @class); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (@class.IsRefType) |
|
|
|
if (CSharpTextTemplate.ShouldGenerateClassNativeField(@class)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!CLIHeadersTemplate.HasRefBase(@class)) |
|
|
|
PushBlock(CLIBlockKind.Method); |
|
|
|
{ |
|
|
|
WriteLine("System::IntPtr {0}::Instance::get()", |
|
|
|
PushBlock(CLIBlockKind.Method); |
|
|
|
QualifiedIdentifier(@class)); |
|
|
|
WriteLine("System::IntPtr {0}::Instance::get()", |
|
|
|
WriteStartBraceIndent(); |
|
|
|
QualifiedIdentifier(@class)); |
|
|
|
WriteLine("return System::IntPtr(NativePtr);"); |
|
|
|
WriteStartBraceIndent(); |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
WriteLine("return System::IntPtr(NativePtr);"); |
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
PushBlock(CLIBlockKind.Method); |
|
|
|
|
|
|
|
WriteLine("void {0}::Instance::set(System::IntPtr object)", |
|
|
|
PushBlock(CLIBlockKind.Method); |
|
|
|
QualifiedIdentifier(@class)); |
|
|
|
WriteLine("void {0}::Instance::set(System::IntPtr object)", |
|
|
|
WriteStartBraceIndent(); |
|
|
|
QualifiedIdentifier(@class)); |
|
|
|
var nativeType = string.Format("::{0}*", @class.QualifiedOriginalName); |
|
|
|
WriteStartBraceIndent(); |
|
|
|
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType); |
|
|
|
var nativeType = string.Format("::{0}*", @class.QualifiedOriginalName); |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType); |
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GenerateClassProperties(@class, @class); |
|
|
|
GenerateClassProperties(@class, @class); |
|
|
|
@ -206,6 +210,42 @@ namespace CppSharp.Generators.CLI |
|
|
|
GenerateProperty(property, realOwner); |
|
|
|
GenerateProperty(property, realOwner); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void GenerateClassDestructor(Class @class) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!Options.GenerateFinalizers) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PushBlock(CLIBlockKind.Destructor); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WriteLine("{0}::~{1}()", QualifiedIdentifier(@class), @class.Name); |
|
|
|
|
|
|
|
WriteStartBraceIndent(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CSharpTextTemplate.ShouldGenerateClassNativeField(@class)) |
|
|
|
|
|
|
|
WriteLine("delete NativePtr;"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void GenerateClassFinalizer(Class @class) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!Options.GenerateFinalizers) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PushBlock(CLIBlockKind.Finalizer); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WriteLine("{0}::!{1}()", QualifiedIdentifier(@class), @class.Name); |
|
|
|
|
|
|
|
WriteStartBraceIndent(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CSharpTextTemplate.ShouldGenerateClassNativeField(@class)) |
|
|
|
|
|
|
|
WriteLine("delete NativePtr;"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PopBlock(NewLineKind.BeforeNextBlock); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void GenerateFunctionTemplate(FunctionTemplate template) |
|
|
|
private void GenerateFunctionTemplate(FunctionTemplate template) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var printer = TypePrinter; |
|
|
|
var printer = TypePrinter; |
|
|
|
|