Browse Source

Implemented IDisposable.Dispose in the C++/CLI front end.

Fixes https://github.com/mono/CppSharp/issues/538

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/540/head
Dimitar Dobrev 10 years ago
parent
commit
5c66aa2730
  1. 399
      src/CppParser/Bindings/CLI/AST.cpp
  2. 210
      src/CppParser/Bindings/CLI/AST.h
  3. 36
      src/CppParser/Bindings/CLI/CppParser.cpp
  4. 20
      src/CppParser/Bindings/CLI/CppParser.h
  5. 9
      src/CppParser/Bindings/CLI/Target.cpp
  6. 5
      src/CppParser/Bindings/CLI/Target.h
  7. 9
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  8. 35
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

399
src/CppParser/Bindings/CLI/AST.cpp

File diff suppressed because it is too large Load Diff

210
src/CppParser/Bindings/CLI/AST.h

@ -353,6 +353,8 @@ namespace CppSharp @@ -353,6 +353,8 @@ namespace CppSharp
Type(CppSharp::Parser::AST::Type^ _0);
~Type();
property CppSharp::Parser::AST::TypeKind Kind
{
CppSharp::Parser::AST::TypeKind get();
@ -364,6 +366,9 @@ namespace CppSharp @@ -364,6 +366,9 @@ namespace CppSharp
bool get();
void set(bool);
}
private:
bool __ownsNativeInstance;
};
public ref class TypeQualifiers : ICppInstance
@ -383,6 +388,8 @@ namespace CppSharp @@ -383,6 +388,8 @@ namespace CppSharp
TypeQualifiers();
~TypeQualifiers();
property bool IsConst
{
bool get();
@ -400,6 +407,9 @@ namespace CppSharp @@ -400,6 +407,9 @@ namespace CppSharp
bool get();
void set(bool);
}
private:
bool __ownsNativeInstance;
};
public ref class QualifiedType : ICppInstance
@ -419,6 +429,8 @@ namespace CppSharp @@ -419,6 +429,8 @@ namespace CppSharp
QualifiedType(CppSharp::Parser::AST::QualifiedType^ _0);
~QualifiedType();
property CppSharp::Parser::AST::Type^ Type
{
CppSharp::Parser::AST::Type^ get();
@ -430,6 +442,9 @@ namespace CppSharp @@ -430,6 +442,9 @@ namespace CppSharp
CppSharp::Parser::AST::TypeQualifiers^ get();
void set(CppSharp::Parser::AST::TypeQualifiers^);
}
private:
bool __ownsNativeInstance;
};
public ref class TagType : CppSharp::Parser::AST::Type
@ -442,6 +457,8 @@ namespace CppSharp @@ -442,6 +457,8 @@ namespace CppSharp
TagType(CppSharp::Parser::AST::TagType^ _0);
~TagType();
property CppSharp::Parser::AST::Declaration^ Declaration
{
CppSharp::Parser::AST::Declaration^ get();
@ -467,6 +484,8 @@ namespace CppSharp @@ -467,6 +484,8 @@ namespace CppSharp
ArrayType(CppSharp::Parser::AST::ArrayType^ _0);
~ArrayType();
property CppSharp::Parser::AST::QualifiedType^ QualifiedType
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -496,6 +515,8 @@ namespace CppSharp @@ -496,6 +515,8 @@ namespace CppSharp
FunctionType(CppSharp::Parser::AST::FunctionType^ _0);
~FunctionType();
property unsigned int ParametersCount
{
unsigned int get();
@ -538,6 +559,8 @@ namespace CppSharp @@ -538,6 +559,8 @@ namespace CppSharp
PointerType(CppSharp::Parser::AST::PointerType^ _0);
~PointerType();
property CppSharp::Parser::AST::QualifiedType^ QualifiedPointee
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -561,6 +584,8 @@ namespace CppSharp @@ -561,6 +584,8 @@ namespace CppSharp
MemberPointerType(CppSharp::Parser::AST::MemberPointerType^ _0);
~MemberPointerType();
property CppSharp::Parser::AST::QualifiedType^ Pointee
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -578,6 +603,8 @@ namespace CppSharp @@ -578,6 +603,8 @@ namespace CppSharp
TypedefType(CppSharp::Parser::AST::TypedefType^ _0);
~TypedefType();
property CppSharp::Parser::AST::TypedefDecl^ Declaration
{
CppSharp::Parser::AST::TypedefDecl^ get();
@ -595,6 +622,8 @@ namespace CppSharp @@ -595,6 +622,8 @@ namespace CppSharp
AttributedType(CppSharp::Parser::AST::AttributedType^ _0);
~AttributedType();
property CppSharp::Parser::AST::QualifiedType^ Modified
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -618,6 +647,8 @@ namespace CppSharp @@ -618,6 +647,8 @@ namespace CppSharp
DecayedType(CppSharp::Parser::AST::DecayedType^ _0);
~DecayedType();
property CppSharp::Parser::AST::QualifiedType^ Decayed
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -666,6 +697,8 @@ namespace CppSharp @@ -666,6 +697,8 @@ namespace CppSharp
TemplateArgument(CppSharp::Parser::AST::TemplateArgument^ _0);
~TemplateArgument();
property CppSharp::Parser::AST::TemplateArgument::ArgumentKind Kind
{
CppSharp::Parser::AST::TemplateArgument::ArgumentKind get();
@ -689,6 +722,9 @@ namespace CppSharp @@ -689,6 +722,9 @@ namespace CppSharp
long get();
void set(long);
}
private:
bool __ownsNativeInstance;
};
public ref class TemplateSpecializationType : CppSharp::Parser::AST::Type
@ -701,6 +737,8 @@ namespace CppSharp @@ -701,6 +737,8 @@ namespace CppSharp
TemplateSpecializationType(CppSharp::Parser::AST::TemplateSpecializationType^ _0);
~TemplateSpecializationType();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -742,6 +780,8 @@ namespace CppSharp @@ -742,6 +780,8 @@ namespace CppSharp
TemplateParameter(CppSharp::Parser::AST::TemplateParameter^ _0);
~TemplateParameter();
property System::String^ Name
{
System::String^ get();
@ -757,6 +797,9 @@ namespace CppSharp @@ -757,6 +797,9 @@ namespace CppSharp
static bool operator==(CppSharp::Parser::AST::TemplateParameter^ __op, CppSharp::Parser::AST::TemplateParameter^ param);
virtual bool Equals(::System::Object^ obj) override;
private:
bool __ownsNativeInstance;
};
public ref class TemplateParameterType : CppSharp::Parser::AST::Type
@ -769,6 +812,8 @@ namespace CppSharp @@ -769,6 +812,8 @@ namespace CppSharp
TemplateParameterType(CppSharp::Parser::AST::TemplateParameterType^ _0);
~TemplateParameterType();
property CppSharp::Parser::AST::TemplateParameter^ Parameter
{
CppSharp::Parser::AST::TemplateParameter^ get();
@ -804,6 +849,8 @@ namespace CppSharp @@ -804,6 +849,8 @@ namespace CppSharp
TemplateParameterSubstitutionType(CppSharp::Parser::AST::TemplateParameterSubstitutionType^ _0);
~TemplateParameterSubstitutionType();
property CppSharp::Parser::AST::QualifiedType^ Replacement
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -821,6 +868,8 @@ namespace CppSharp @@ -821,6 +868,8 @@ namespace CppSharp
InjectedClassNameType(CppSharp::Parser::AST::InjectedClassNameType^ _0);
~InjectedClassNameType();
property CppSharp::Parser::AST::TemplateSpecializationType^ TemplateSpecialization
{
CppSharp::Parser::AST::TemplateSpecializationType^ get();
@ -843,6 +892,8 @@ namespace CppSharp @@ -843,6 +892,8 @@ namespace CppSharp
DependentNameType();
DependentNameType(CppSharp::Parser::AST::DependentNameType^ _0);
~DependentNameType();
};
public ref class PackExpansionType : CppSharp::Parser::AST::Type
@ -854,6 +905,8 @@ namespace CppSharp @@ -854,6 +905,8 @@ namespace CppSharp
PackExpansionType();
PackExpansionType(CppSharp::Parser::AST::PackExpansionType^ _0);
~PackExpansionType();
};
public ref class BuiltinType : CppSharp::Parser::AST::Type
@ -866,6 +919,8 @@ namespace CppSharp @@ -866,6 +919,8 @@ namespace CppSharp
BuiltinType(CppSharp::Parser::AST::BuiltinType^ _0);
~BuiltinType();
property CppSharp::Parser::AST::PrimitiveType Type
{
CppSharp::Parser::AST::PrimitiveType get();
@ -890,6 +945,8 @@ namespace CppSharp @@ -890,6 +945,8 @@ namespace CppSharp
VTableComponent(CppSharp::Parser::AST::VTableComponent^ _0);
~VTableComponent();
property CppSharp::Parser::AST::VTableComponentKind Kind
{
CppSharp::Parser::AST::VTableComponentKind get();
@ -907,6 +964,9 @@ namespace CppSharp @@ -907,6 +964,9 @@ namespace CppSharp
CppSharp::Parser::AST::Declaration^ get();
void set(CppSharp::Parser::AST::Declaration^);
}
private:
bool __ownsNativeInstance;
};
public ref class VTableLayout : ICppInstance
@ -926,6 +986,8 @@ namespace CppSharp @@ -926,6 +986,8 @@ namespace CppSharp
VTableLayout(CppSharp::Parser::AST::VTableLayout^ _0);
~VTableLayout();
property unsigned int ComponentsCount
{
unsigned int get();
@ -936,6 +998,9 @@ namespace CppSharp @@ -936,6 +998,9 @@ namespace CppSharp
void addComponents(CppSharp::Parser::AST::VTableComponent^ s);
void clearComponents();
private:
bool __ownsNativeInstance;
};
public ref class VFTableInfo : ICppInstance
@ -955,6 +1020,8 @@ namespace CppSharp @@ -955,6 +1020,8 @@ namespace CppSharp
VFTableInfo(CppSharp::Parser::AST::VFTableInfo^ _0);
~VFTableInfo();
property unsigned long long VBTableIndex
{
unsigned long long get();
@ -978,6 +1045,9 @@ namespace CppSharp @@ -978,6 +1045,9 @@ namespace CppSharp
CppSharp::Parser::AST::VTableLayout^ get();
void set(CppSharp::Parser::AST::VTableLayout^);
}
private:
bool __ownsNativeInstance;
};
public ref class ClassLayout : ICppInstance
@ -997,6 +1067,8 @@ namespace CppSharp @@ -997,6 +1067,8 @@ namespace CppSharp
ClassLayout(CppSharp::Parser::AST::ClassLayout^ _0);
~ClassLayout();
property unsigned int VFTablesCount
{
unsigned int get();
@ -1049,6 +1121,9 @@ namespace CppSharp @@ -1049,6 +1121,9 @@ namespace CppSharp
void addVFTables(CppSharp::Parser::AST::VFTableInfo^ s);
void clearVFTables();
private:
bool __ownsNativeInstance;
};
public ref class Declaration : ICppInstance
@ -1068,6 +1143,8 @@ namespace CppSharp @@ -1068,6 +1143,8 @@ namespace CppSharp
Declaration(CppSharp::Parser::AST::Declaration^ _0);
~Declaration();
property System::String^ Name
{
System::String^ get();
@ -1162,6 +1239,9 @@ namespace CppSharp @@ -1162,6 +1239,9 @@ namespace CppSharp
void addPreprocessedEntities(CppSharp::Parser::AST::PreprocessedEntity^ s);
void clearPreprocessedEntities();
private:
bool __ownsNativeInstance;
};
public ref class DeclarationContext : CppSharp::Parser::AST::Declaration
@ -1174,6 +1254,8 @@ namespace CppSharp @@ -1174,6 +1254,8 @@ namespace CppSharp
DeclarationContext(CppSharp::Parser::AST::DeclarationContext^ _0);
~DeclarationContext();
property unsigned int NamespacesCount
{
unsigned int get();
@ -1279,6 +1361,8 @@ namespace CppSharp @@ -1279,6 +1361,8 @@ namespace CppSharp
TypedefDecl(CppSharp::Parser::AST::TypedefDecl^ _0);
~TypedefDecl();
property CppSharp::Parser::AST::QualifiedType^ QualifiedType
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -1296,6 +1380,8 @@ namespace CppSharp @@ -1296,6 +1380,8 @@ namespace CppSharp
Friend(CppSharp::Parser::AST::Friend^ _0);
~Friend();
property CppSharp::Parser::AST::Declaration^ Declaration
{
CppSharp::Parser::AST::Declaration^ get();
@ -1318,6 +1404,8 @@ namespace CppSharp @@ -1318,6 +1404,8 @@ namespace CppSharp
static Statement^ __CreateInstance(::System::IntPtr native);
Statement(CppSharp::Parser::AST::Statement^ _0);
~Statement();
property System::String^ String
{
System::String^ get();
@ -1335,6 +1423,9 @@ namespace CppSharp @@ -1335,6 +1423,9 @@ namespace CppSharp
CppSharp::Parser::AST::Declaration^ get();
void set(CppSharp::Parser::AST::Declaration^);
}
private:
bool __ownsNativeInstance;
};
public ref class Expression : CppSharp::Parser::AST::Statement
@ -1344,6 +1435,8 @@ namespace CppSharp @@ -1344,6 +1435,8 @@ namespace CppSharp
Expression(::CppSharp::CppParser::AST::Expression* native);
static Expression^ __CreateInstance(::System::IntPtr native);
Expression(CppSharp::Parser::AST::Expression^ _0);
~Expression();
};
public ref class BinaryOperator : CppSharp::Parser::AST::Expression
@ -1354,6 +1447,8 @@ namespace CppSharp @@ -1354,6 +1447,8 @@ namespace CppSharp
static BinaryOperator^ __CreateInstance(::System::IntPtr native);
BinaryOperator(CppSharp::Parser::AST::BinaryOperator^ _0);
~BinaryOperator();
property System::String^ OpcodeStr
{
System::String^ get();
@ -1381,6 +1476,8 @@ namespace CppSharp @@ -1381,6 +1476,8 @@ namespace CppSharp
static CXXConstructExpr^ __CreateInstance(::System::IntPtr native);
CXXConstructExpr(CppSharp::Parser::AST::CXXConstructExpr^ _0);
~CXXConstructExpr();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -1403,6 +1500,8 @@ namespace CppSharp @@ -1403,6 +1500,8 @@ namespace CppSharp
Parameter(CppSharp::Parser::AST::Parameter^ _0);
~Parameter();
property CppSharp::Parser::AST::QualifiedType^ QualifiedType
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -1444,6 +1543,8 @@ namespace CppSharp @@ -1444,6 +1543,8 @@ namespace CppSharp
Function(CppSharp::Parser::AST::Function^ _0);
~Function();
property System::String^ Mangled
{
System::String^ get();
@ -1538,6 +1639,8 @@ namespace CppSharp @@ -1538,6 +1639,8 @@ namespace CppSharp
Method(CppSharp::Parser::AST::Method^ _0);
~Method();
property CppSharp::Parser::AST::AccessSpecifierDecl^ AccessDecl
{
CppSharp::Parser::AST::AccessSpecifierDecl^ get();
@ -1633,6 +1736,8 @@ namespace CppSharp @@ -1633,6 +1736,8 @@ namespace CppSharp
Item(CppSharp::Parser::AST::Enumeration::Item^ _0);
~Item();
property System::String^ Expression
{
System::String^ get();
@ -1652,6 +1757,8 @@ namespace CppSharp @@ -1652,6 +1757,8 @@ namespace CppSharp
Enumeration(CppSharp::Parser::AST::Enumeration^ _0);
~Enumeration();
property unsigned int ItemsCount
{
unsigned int get();
@ -1692,6 +1799,8 @@ namespace CppSharp @@ -1692,6 +1799,8 @@ namespace CppSharp
Variable(CppSharp::Parser::AST::Variable^ _0);
~Variable();
property System::String^ Mangled
{
System::String^ get();
@ -1722,6 +1831,8 @@ namespace CppSharp @@ -1722,6 +1831,8 @@ namespace CppSharp
BaseClassSpecifier(CppSharp::Parser::AST::BaseClassSpecifier^ _0);
~BaseClassSpecifier();
property CppSharp::Parser::AST::AccessSpecifier Access
{
CppSharp::Parser::AST::AccessSpecifier get();
@ -1745,6 +1856,9 @@ namespace CppSharp @@ -1745,6 +1856,9 @@ namespace CppSharp
int get();
void set(int);
}
private:
bool __ownsNativeInstance;
};
public ref class Field : CppSharp::Parser::AST::Declaration
@ -1757,6 +1871,8 @@ namespace CppSharp @@ -1757,6 +1871,8 @@ namespace CppSharp
Field(CppSharp::Parser::AST::Field^ _0);
~Field();
property CppSharp::Parser::AST::QualifiedType^ QualifiedType
{
CppSharp::Parser::AST::QualifiedType^ get();
@ -1797,6 +1913,8 @@ namespace CppSharp @@ -1797,6 +1913,8 @@ namespace CppSharp
AccessSpecifierDecl();
AccessSpecifierDecl(CppSharp::Parser::AST::AccessSpecifierDecl^ _0);
~AccessSpecifierDecl();
};
public ref class Class : CppSharp::Parser::AST::DeclarationContext
@ -1809,6 +1927,8 @@ namespace CppSharp @@ -1809,6 +1927,8 @@ namespace CppSharp
Class(CppSharp::Parser::AST::Class^ _0);
~Class();
property unsigned int BasesCount
{
unsigned int get();
@ -1926,6 +2046,8 @@ namespace CppSharp @@ -1926,6 +2046,8 @@ namespace CppSharp
Template(CppSharp::Parser::AST::Template^ _0);
~Template();
property unsigned int ParametersCount
{
unsigned int get();
@ -1954,6 +2076,8 @@ namespace CppSharp @@ -1954,6 +2076,8 @@ namespace CppSharp
ClassTemplate(CppSharp::Parser::AST::ClassTemplate^ _0);
~ClassTemplate();
property unsigned int SpecializationsCount
{
unsigned int get();
@ -1976,6 +2100,8 @@ namespace CppSharp @@ -1976,6 +2100,8 @@ namespace CppSharp
ClassTemplateSpecialization(CppSharp::Parser::AST::ClassTemplateSpecialization^ _0);
~ClassTemplateSpecialization();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -2009,6 +2135,8 @@ namespace CppSharp @@ -2009,6 +2135,8 @@ namespace CppSharp
ClassTemplatePartialSpecialization();
ClassTemplatePartialSpecialization(CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ _0);
~ClassTemplatePartialSpecialization();
};
public ref class FunctionTemplate : CppSharp::Parser::AST::Template
@ -2021,6 +2149,8 @@ namespace CppSharp @@ -2021,6 +2149,8 @@ namespace CppSharp
FunctionTemplate(CppSharp::Parser::AST::FunctionTemplate^ _0);
~FunctionTemplate();
property unsigned int SpecializationsCount
{
unsigned int get();
@ -2050,6 +2180,8 @@ namespace CppSharp @@ -2050,6 +2180,8 @@ namespace CppSharp
FunctionTemplateSpecialization(CppSharp::Parser::AST::FunctionTemplateSpecialization^ _0);
~FunctionTemplateSpecialization();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -2078,6 +2210,9 @@ namespace CppSharp @@ -2078,6 +2210,9 @@ namespace CppSharp
void addArguments(CppSharp::Parser::AST::TemplateArgument^ s);
void clearArguments();
private:
bool __ownsNativeInstance;
};
public ref class Namespace : CppSharp::Parser::AST::DeclarationContext
@ -2090,6 +2225,8 @@ namespace CppSharp @@ -2090,6 +2225,8 @@ namespace CppSharp
Namespace(CppSharp::Parser::AST::Namespace^ _0);
~Namespace();
property bool IsInline
{
bool get();
@ -2107,6 +2244,8 @@ namespace CppSharp @@ -2107,6 +2244,8 @@ namespace CppSharp
PreprocessedEntity(CppSharp::Parser::AST::PreprocessedEntity^ _0);
~PreprocessedEntity();
property CppSharp::Parser::AST::MacroLocation MacroLocation
{
CppSharp::Parser::AST::MacroLocation get();
@ -2124,6 +2263,8 @@ namespace CppSharp @@ -2124,6 +2263,8 @@ namespace CppSharp
MacroDefinition(CppSharp::Parser::AST::MacroDefinition^ _0);
~MacroDefinition();
property System::String^ Expression
{
System::String^ get();
@ -2141,6 +2282,8 @@ namespace CppSharp @@ -2141,6 +2282,8 @@ namespace CppSharp
MacroExpansion(CppSharp::Parser::AST::MacroExpansion^ _0);
~MacroExpansion();
property System::String^ Text
{
System::String^ get();
@ -2164,6 +2307,8 @@ namespace CppSharp @@ -2164,6 +2307,8 @@ namespace CppSharp
TranslationUnit(CppSharp::Parser::AST::TranslationUnit^ _0);
~TranslationUnit();
property System::String^ FileName
{
System::String^ get();
@ -2205,6 +2350,8 @@ namespace CppSharp @@ -2205,6 +2350,8 @@ namespace CppSharp
NativeLibrary(CppSharp::Parser::AST::NativeLibrary^ _0);
~NativeLibrary();
property System::String^ FileName
{
System::String^ get();
@ -2238,6 +2385,9 @@ namespace CppSharp @@ -2238,6 +2385,9 @@ namespace CppSharp
void addDependencies(System::String^ s);
void clearDependencies();
private:
bool __ownsNativeInstance;
};
public ref class ASTContext : ICppInstance
@ -2257,6 +2407,8 @@ namespace CppSharp @@ -2257,6 +2407,8 @@ namespace CppSharp
ASTContext(CppSharp::Parser::AST::ASTContext^ _0);
~ASTContext();
property unsigned int TranslationUnitsCount
{
unsigned int get();
@ -2267,6 +2419,9 @@ namespace CppSharp @@ -2267,6 +2419,9 @@ namespace CppSharp
void addTranslationUnits(CppSharp::Parser::AST::TranslationUnit^ s);
void clearTranslationUnits();
private:
bool __ownsNativeInstance;
};
public ref class Comment : ICppInstance
@ -2286,11 +2441,16 @@ namespace CppSharp @@ -2286,11 +2441,16 @@ namespace CppSharp
Comment(CppSharp::Parser::AST::Comment^ _0);
~Comment();
property CppSharp::Parser::AST::CommentKind Kind
{
CppSharp::Parser::AST::CommentKind get();
void set(CppSharp::Parser::AST::CommentKind);
}
private:
bool __ownsNativeInstance;
};
public ref class BlockContentComment : CppSharp::Parser::AST::Comment
@ -2304,6 +2464,8 @@ namespace CppSharp @@ -2304,6 +2464,8 @@ namespace CppSharp
BlockContentComment(CppSharp::Parser::AST::CommentKind Kind);
BlockContentComment(CppSharp::Parser::AST::BlockContentComment^ _0);
~BlockContentComment();
};
public ref class FullComment : CppSharp::Parser::AST::Comment
@ -2316,6 +2478,8 @@ namespace CppSharp @@ -2316,6 +2478,8 @@ namespace CppSharp
FullComment(CppSharp::Parser::AST::FullComment^ _0);
~FullComment();
property unsigned int BlocksCount
{
unsigned int get();
@ -2349,11 +2513,16 @@ namespace CppSharp @@ -2349,11 +2513,16 @@ namespace CppSharp
Argument(CppSharp::Parser::AST::BlockCommandComment::Argument^ _0);
~Argument();
property System::String^ Text
{
System::String^ get();
void set(System::String^);
}
private:
bool __ownsNativeInstance;
};
BlockCommandComment(::CppSharp::CppParser::AST::BlockCommandComment* native);
@ -2364,6 +2533,8 @@ namespace CppSharp @@ -2364,6 +2533,8 @@ namespace CppSharp
BlockCommandComment(CppSharp::Parser::AST::BlockCommandComment^ _0);
~BlockCommandComment();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -2399,6 +2570,8 @@ namespace CppSharp @@ -2399,6 +2570,8 @@ namespace CppSharp
ParamCommandComment(CppSharp::Parser::AST::ParamCommandComment^ _0);
~ParamCommandComment();
property CppSharp::Parser::AST::ParamCommandComment::PassDirection Direction
{
CppSharp::Parser::AST::ParamCommandComment::PassDirection get();
@ -2422,6 +2595,8 @@ namespace CppSharp @@ -2422,6 +2595,8 @@ namespace CppSharp
TParamCommandComment(CppSharp::Parser::AST::TParamCommandComment^ _0);
~TParamCommandComment();
property unsigned int PositionCount
{
unsigned int get();
@ -2444,6 +2619,8 @@ namespace CppSharp @@ -2444,6 +2619,8 @@ namespace CppSharp
VerbatimBlockLineComment(CppSharp::Parser::AST::VerbatimBlockLineComment^ _0);
~VerbatimBlockLineComment();
property System::String^ Text
{
System::String^ get();
@ -2461,6 +2638,8 @@ namespace CppSharp @@ -2461,6 +2638,8 @@ namespace CppSharp
VerbatimBlockComment(CppSharp::Parser::AST::VerbatimBlockComment^ _0);
~VerbatimBlockComment();
property unsigned int LinesCount
{
unsigned int get();
@ -2483,6 +2662,8 @@ namespace CppSharp @@ -2483,6 +2662,8 @@ namespace CppSharp
VerbatimLineComment(CppSharp::Parser::AST::VerbatimLineComment^ _0);
~VerbatimLineComment();
property System::String^ Text
{
System::String^ get();
@ -2501,6 +2682,8 @@ namespace CppSharp @@ -2501,6 +2682,8 @@ namespace CppSharp
InlineContentComment(CppSharp::Parser::AST::CommentKind Kind);
InlineContentComment(CppSharp::Parser::AST::InlineContentComment^ _0);
~InlineContentComment();
};
public ref class ParagraphComment : CppSharp::Parser::AST::BlockContentComment
@ -2513,6 +2696,8 @@ namespace CppSharp @@ -2513,6 +2696,8 @@ namespace CppSharp
ParagraphComment(CppSharp::Parser::AST::ParagraphComment^ _0);
~ParagraphComment();
property unsigned int ContentCount
{
unsigned int get();
@ -2560,11 +2745,16 @@ namespace CppSharp @@ -2560,11 +2745,16 @@ namespace CppSharp
Argument(CppSharp::Parser::AST::InlineCommandComment::Argument^ _0);
~Argument();
property System::String^ Text
{
System::String^ get();
void set(System::String^);
}
private:
bool __ownsNativeInstance;
};
InlineCommandComment(::CppSharp::CppParser::AST::InlineCommandComment* native);
@ -2573,6 +2763,8 @@ namespace CppSharp @@ -2573,6 +2763,8 @@ namespace CppSharp
InlineCommandComment(CppSharp::Parser::AST::InlineCommandComment^ _0);
~InlineCommandComment();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -2602,6 +2794,8 @@ namespace CppSharp @@ -2602,6 +2794,8 @@ namespace CppSharp
HTMLTagComment(CppSharp::Parser::AST::CommentKind Kind);
HTMLTagComment(CppSharp::Parser::AST::HTMLTagComment^ _0);
~HTMLTagComment();
};
public ref class HTMLStartTagComment : CppSharp::Parser::AST::HTMLTagComment
@ -2625,6 +2819,8 @@ namespace CppSharp @@ -2625,6 +2819,8 @@ namespace CppSharp
Attribute(CppSharp::Parser::AST::HTMLStartTagComment::Attribute^ _0);
~Attribute();
property System::String^ Name
{
System::String^ get();
@ -2636,6 +2832,9 @@ namespace CppSharp @@ -2636,6 +2832,9 @@ namespace CppSharp
System::String^ get();
void set(System::String^);
}
private:
bool __ownsNativeInstance;
};
HTMLStartTagComment(::CppSharp::CppParser::AST::HTMLStartTagComment* native);
@ -2644,6 +2843,8 @@ namespace CppSharp @@ -2644,6 +2843,8 @@ namespace CppSharp
HTMLStartTagComment(CppSharp::Parser::AST::HTMLStartTagComment^ _0);
~HTMLStartTagComment();
property System::String^ TagName
{
System::String^ get();
@ -2672,6 +2873,8 @@ namespace CppSharp @@ -2672,6 +2873,8 @@ namespace CppSharp
HTMLEndTagComment(CppSharp::Parser::AST::HTMLEndTagComment^ _0);
~HTMLEndTagComment();
property System::String^ TagName
{
System::String^ get();
@ -2689,6 +2892,8 @@ namespace CppSharp @@ -2689,6 +2892,8 @@ namespace CppSharp
TextComment(CppSharp::Parser::AST::TextComment^ _0);
~TextComment();
property System::String^ Text
{
System::String^ get();
@ -2713,6 +2918,8 @@ namespace CppSharp @@ -2713,6 +2918,8 @@ namespace CppSharp
RawComment(CppSharp::Parser::AST::RawComment^ _0);
~RawComment();
property System::String^ Text
{
System::String^ get();
@ -2736,6 +2943,9 @@ namespace CppSharp @@ -2736,6 +2943,9 @@ namespace CppSharp
CppSharp::Parser::AST::FullComment^ get();
void set(CppSharp::Parser::AST::FullComment^);
}
private:
bool __ownsNativeInstance;
};
}
}

36
src/CppParser/Bindings/CLI/CppParser.cpp

@ -6,6 +6,7 @@ using namespace System; @@ -6,6 +6,7 @@ using namespace System;
using namespace System::Runtime::InteropServices;
CppSharp::Parser::ParserOptions::ParserOptions(::CppSharp::CppParser::ParserOptions* native)
: __ownsNativeInstance(false)
{
NativePtr = native;
}
@ -15,7 +16,14 @@ CppSharp::Parser::ParserOptions^ CppSharp::Parser::ParserOptions::__CreateInstan @@ -15,7 +16,14 @@ CppSharp::Parser::ParserOptions^ CppSharp::Parser::ParserOptions::__CreateInstan
return gcnew ::CppSharp::Parser::ParserOptions((::CppSharp::CppParser::ParserOptions*) native.ToPointer());
}
CppSharp::Parser::ParserOptions::~ParserOptions()
{
if (__ownsNativeInstance)
delete NativePtr;
}
CppSharp::Parser::ParserOptions::ParserOptions()
: __ownsNativeInstance(true)
{
NativePtr = new ::CppSharp::CppParser::ParserOptions();
}
@ -135,6 +143,7 @@ void CppSharp::Parser::ParserOptions::clearLibraryDirs() @@ -135,6 +143,7 @@ void CppSharp::Parser::ParserOptions::clearLibraryDirs()
}
CppSharp::Parser::ParserOptions::ParserOptions(CppSharp::Parser::ParserOptions^ _0)
: __ownsNativeInstance(true)
{
auto &arg0 = *(::CppSharp::CppParser::ParserOptions*)_0->NativePtr;
NativePtr = new ::CppSharp::CppParser::ParserOptions(arg0);
@ -295,6 +304,7 @@ void CppSharp::Parser::ParserOptions::LanguageVersion::set(CppSharp::Parser::Lan @@ -295,6 +304,7 @@ void CppSharp::Parser::ParserOptions::LanguageVersion::set(CppSharp::Parser::Lan
}
CppSharp::Parser::ParserDiagnostic::ParserDiagnostic(::CppSharp::CppParser::ParserDiagnostic* native)
: __ownsNativeInstance(false)
{
NativePtr = native;
}
@ -304,12 +314,20 @@ CppSharp::Parser::ParserDiagnostic^ CppSharp::Parser::ParserDiagnostic::__Create @@ -304,12 +314,20 @@ CppSharp::Parser::ParserDiagnostic^ CppSharp::Parser::ParserDiagnostic::__Create
return gcnew ::CppSharp::Parser::ParserDiagnostic((::CppSharp::CppParser::ParserDiagnostic*) native.ToPointer());
}
CppSharp::Parser::ParserDiagnostic::~ParserDiagnostic()
{
if (__ownsNativeInstance)
delete NativePtr;
}
CppSharp::Parser::ParserDiagnostic::ParserDiagnostic()
: __ownsNativeInstance(true)
{
NativePtr = new ::CppSharp::CppParser::ParserDiagnostic();
}
CppSharp::Parser::ParserDiagnostic::ParserDiagnostic(CppSharp::Parser::ParserDiagnostic^ _0)
: __ownsNativeInstance(true)
{
auto &arg0 = *(::CppSharp::CppParser::ParserDiagnostic*)_0->NativePtr;
NativePtr = new ::CppSharp::CppParser::ParserDiagnostic(arg0);
@ -384,6 +402,7 @@ void CppSharp::Parser::ParserDiagnostic::ColumnNumber::set(int value) @@ -384,6 +402,7 @@ void CppSharp::Parser::ParserDiagnostic::ColumnNumber::set(int value)
}
CppSharp::Parser::ParserResult::ParserResult(::CppSharp::CppParser::ParserResult* native)
: __ownsNativeInstance(false)
{
NativePtr = native;
}
@ -393,12 +412,20 @@ CppSharp::Parser::ParserResult^ CppSharp::Parser::ParserResult::__CreateInstance @@ -393,12 +412,20 @@ CppSharp::Parser::ParserResult^ CppSharp::Parser::ParserResult::__CreateInstance
return gcnew ::CppSharp::Parser::ParserResult((::CppSharp::CppParser::ParserResult*) native.ToPointer());
}
CppSharp::Parser::ParserResult::~ParserResult()
{
if (__ownsNativeInstance)
delete NativePtr;
}
CppSharp::Parser::ParserResult::ParserResult()
: __ownsNativeInstance(true)
{
NativePtr = new ::CppSharp::CppParser::ParserResult();
}
CppSharp::Parser::ParserResult::ParserResult(CppSharp::Parser::ParserResult^ _0)
: __ownsNativeInstance(true)
{
auto &arg0 = *(::CppSharp::CppParser::ParserResult*)_0->NativePtr;
NativePtr = new ::CppSharp::CppParser::ParserResult(arg0);
@ -469,6 +496,7 @@ void CppSharp::Parser::ParserResult::Library::set(CppSharp::Parser::AST::NativeL @@ -469,6 +496,7 @@ void CppSharp::Parser::ParserResult::Library::set(CppSharp::Parser::AST::NativeL
}
CppSharp::Parser::ClangParser::ClangParser(::CppSharp::CppParser::ClangParser* native)
: __ownsNativeInstance(false)
{
NativePtr = native;
}
@ -478,6 +506,12 @@ CppSharp::Parser::ClangParser^ CppSharp::Parser::ClangParser::__CreateInstance(: @@ -478,6 +506,12 @@ CppSharp::Parser::ClangParser^ CppSharp::Parser::ClangParser::__CreateInstance(:
return gcnew ::CppSharp::Parser::ClangParser((::CppSharp::CppParser::ClangParser*) native.ToPointer());
}
CppSharp::Parser::ClangParser::~ClangParser()
{
if (__ownsNativeInstance)
delete NativePtr;
}
CppSharp::Parser::ParserResult^ CppSharp::Parser::ClangParser::ParseHeader(CppSharp::Parser::ParserOptions^ Opts)
{
auto arg0 = (::CppSharp::CppParser::ParserOptions*)Opts->NativePtr;
@ -503,11 +537,13 @@ CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ClangParser::GetTargetInfo @@ -503,11 +537,13 @@ CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ClangParser::GetTargetInfo
}
CppSharp::Parser::ClangParser::ClangParser()
: __ownsNativeInstance(true)
{
NativePtr = new ::CppSharp::CppParser::ClangParser();
}
CppSharp::Parser::ClangParser::ClangParser(CppSharp::Parser::ClangParser^ _0)
: __ownsNativeInstance(true)
{
auto &arg0 = *(::CppSharp::CppParser::ClangParser*)_0->NativePtr;
NativePtr = new ::CppSharp::CppParser::ClangParser(arg0);

20
src/CppParser/Bindings/CLI/CppParser.h

@ -82,6 +82,8 @@ namespace CppSharp @@ -82,6 +82,8 @@ namespace CppSharp
ParserOptions(CppSharp::Parser::ParserOptions^ _0);
~ParserOptions();
property unsigned int ArgumentsCount
{
unsigned int get();
@ -207,6 +209,9 @@ namespace CppSharp @@ -207,6 +209,9 @@ namespace CppSharp
void addLibraryDirs(System::String^ s);
void clearLibraryDirs();
private:
bool __ownsNativeInstance;
};
public ref class ParserDiagnostic : ICppInstance
@ -226,6 +231,8 @@ namespace CppSharp @@ -226,6 +231,8 @@ namespace CppSharp
ParserDiagnostic(CppSharp::Parser::ParserDiagnostic^ _0);
~ParserDiagnostic();
property System::String^ FileName
{
System::String^ get();
@ -255,6 +262,9 @@ namespace CppSharp @@ -255,6 +262,9 @@ namespace CppSharp
int get();
void set(int);
}
private:
bool __ownsNativeInstance;
};
public ref class ParserResult : ICppInstance
@ -274,6 +284,8 @@ namespace CppSharp @@ -274,6 +284,8 @@ namespace CppSharp
ParserResult(CppSharp::Parser::ParserResult^ _0);
~ParserResult();
property unsigned int DiagnosticsCount
{
unsigned int get();
@ -302,6 +314,9 @@ namespace CppSharp @@ -302,6 +314,9 @@ namespace CppSharp
void addDiagnostics(CppSharp::Parser::ParserDiagnostic^ s);
void clearDiagnostics();
private:
bool __ownsNativeInstance;
};
public ref class ClangParser : ICppInstance
@ -321,11 +336,16 @@ namespace CppSharp @@ -321,11 +336,16 @@ namespace CppSharp
ClangParser(CppSharp::Parser::ClangParser^ _0);
~ClangParser();
static CppSharp::Parser::ParserResult^ ParseHeader(CppSharp::Parser::ParserOptions^ Opts);
static CppSharp::Parser::ParserResult^ ParseLibrary(CppSharp::Parser::ParserOptions^ Opts);
static CppSharp::Parser::ParserTargetInfo^ GetTargetInfo(CppSharp::Parser::ParserOptions^ Opts);
private:
bool __ownsNativeInstance;
};
}
}

9
src/CppParser/Bindings/CLI/Target.cpp

@ -4,6 +4,7 @@ using namespace System; @@ -4,6 +4,7 @@ using namespace System;
using namespace System::Runtime::InteropServices;
CppSharp::Parser::ParserTargetInfo::ParserTargetInfo(::CppSharp::CppParser::ParserTargetInfo* native)
: __ownsNativeInstance(false)
{
NativePtr = native;
}
@ -13,12 +14,20 @@ CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ParserTargetInfo::__Create @@ -13,12 +14,20 @@ CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ParserTargetInfo::__Create
return gcnew ::CppSharp::Parser::ParserTargetInfo((::CppSharp::CppParser::ParserTargetInfo*) native.ToPointer());
}
CppSharp::Parser::ParserTargetInfo::~ParserTargetInfo()
{
if (__ownsNativeInstance)
delete NativePtr;
}
CppSharp::Parser::ParserTargetInfo::ParserTargetInfo()
: __ownsNativeInstance(true)
{
NativePtr = new ::CppSharp::CppParser::ParserTargetInfo();
}
CppSharp::Parser::ParserTargetInfo::ParserTargetInfo(CppSharp::Parser::ParserTargetInfo^ _0)
: __ownsNativeInstance(true)
{
auto &arg0 = *(::CppSharp::CppParser::ParserTargetInfo*)_0->NativePtr;
NativePtr = new ::CppSharp::CppParser::ParserTargetInfo(arg0);

5
src/CppParser/Bindings/CLI/Target.h

@ -48,6 +48,8 @@ namespace CppSharp @@ -48,6 +48,8 @@ namespace CppSharp
ParserTargetInfo(CppSharp::Parser::ParserTargetInfo^ _0);
~ParserTargetInfo();
property System::String^ ABI
{
System::String^ get();
@ -281,6 +283,9 @@ namespace CppSharp @@ -281,6 +283,9 @@ namespace CppSharp
unsigned int get();
void set(unsigned int);
}
private:
bool __ownsNativeInstance;
};
}
}

9
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -275,7 +275,9 @@ namespace CppSharp.Generators.CLI @@ -275,7 +275,9 @@ namespace CppSharp.Generators.CLI
var accBlock = PopBlock(NewLineKind.IfNotEmpty);
PushBlock(CLIBlockKind.Fields);
GenerateClassFields(@class);
GenerateClassFields(@class);
if (CLIGenerator.ShouldGenerateClassNativeField(@class))
WriteLineIndent("bool {0};", Helpers.OwnsNativeInstanceIdentifier);
var fieldsBlock = PopBlock();
accBlock.CheckGenerate = () => !fieldsBlock.IsEmpty;
@ -382,14 +384,15 @@ namespace CppSharp.Generators.CLI @@ -382,14 +384,15 @@ namespace CppSharp.Generators.CLI
GenerateMethod(ctor);
}
if (Options.GenerateFinalizers && @class.IsRefType)
if (@class.IsRefType)
{
var destructor = @class.Destructors
.FirstOrDefault(d => d.Parameters.Count == 0 && d.Access == AccessSpecifier.Public);
if (destructor != null)
{
GenerateClassDestructor(@class);
GenerateClassFinalizer(@class);
if (Options.GenerateFinalizers)
GenerateClassFinalizer(@class);
}
}

35
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -142,9 +142,11 @@ namespace CppSharp.Generators.CLI @@ -142,9 +142,11 @@ namespace CppSharp.Generators.CLI
if (CLIGenerator.ShouldGenerateClassNativeField(@class))
{
var qualifiedIdentifier = QualifiedIdentifier(@class);
PushBlock(CLIBlockKind.Method);
WriteLine("System::IntPtr {0}::{1}::get()",
QualifiedIdentifier(@class), Helpers.InstanceIdentifier);
qualifiedIdentifier, Helpers.InstanceIdentifier);
WriteStartBraceIndent();
WriteLine("return System::IntPtr(NativePtr);");
WriteCloseBraceIndent();
@ -152,7 +154,7 @@ namespace CppSharp.Generators.CLI @@ -152,7 +154,7 @@ namespace CppSharp.Generators.CLI
PushBlock(CLIBlockKind.Method);
WriteLine("void {0}::{1}::set(System::IntPtr object)",
QualifiedIdentifier(@class), Helpers.InstanceIdentifier);
qualifiedIdentifier, Helpers.InstanceIdentifier);
WriteStartBraceIndent();
var nativeType = string.Format("::{0}*", @class.QualifiedOriginalName);
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType);
@ -194,14 +196,15 @@ namespace CppSharp.Generators.CLI @@ -194,14 +196,15 @@ namespace CppSharp.Generators.CLI
// Output a default constructor that takes the native pointer.
GenerateClassConstructor(@class);
if (Options.GenerateFinalizers && @class.IsRefType)
if (@class.IsRefType)
{
var destructor = @class.Destructors
.FirstOrDefault(d => d.Parameters.Count == 0 && d.Access == AccessSpecifier.Public);
if (destructor != null)
{
GenerateClassDestructor(@class);
GenerateClassFinalizer(@class);
if (Options.GenerateFinalizers)
GenerateClassFinalizer(@class);
}
}
}
@ -253,7 +256,10 @@ namespace CppSharp.Generators.CLI @@ -253,7 +256,10 @@ namespace CppSharp.Generators.CLI
WriteStartBraceIndent();
if (CLIGenerator.ShouldGenerateClassNativeField(@class))
WriteLine("delete NativePtr;");
{
WriteLine("if ({0})", Helpers.OwnsNativeInstanceIdentifier);
WriteLineIndent("delete NativePtr;");
}
WriteCloseBraceIndent();
@ -632,6 +638,8 @@ namespace CppSharp.Generators.CLI @@ -632,6 +638,8 @@ namespace CppSharp.Generators.CLI
var hasBase = GenerateClassConstructorBase(@class);
InitialiseOwnsNativeInstance(@class, hasBase, false);
WriteStartBraceIndent();
const string nativePtr = "native";
@ -659,6 +667,18 @@ namespace CppSharp.Generators.CLI @@ -659,6 +667,18 @@ namespace CppSharp.Generators.CLI
NewLine();
}
private void InitialiseOwnsNativeInstance(Class @class, bool hasBase, bool ownsNativeInstance)
{
if (!CLIGenerator.ShouldGenerateClassNativeField(@class)) return;
PushIndent();
Write(hasBase ? "," : ":");
PopIndent();
WriteLine(" {0}({1})", Helpers.OwnsNativeInstanceIdentifier,
ownsNativeInstance ? "true" : "false");
}
private void GenerateStructMarshaling(Class @class, string nativeVar)
{
foreach (var @base in @class.Bases.Where(b => b.IsClass && b.Class.IsDeclared))
@ -738,7 +758,10 @@ namespace CppSharp.Generators.CLI @@ -738,7 +758,10 @@ namespace CppSharp.Generators.CLI
WriteLine(")");
if (method.IsConstructor)
GenerateClassConstructorBase(@class, method: method);
{
var hasBase = GenerateClassConstructorBase(@class, method: method);
InitialiseOwnsNativeInstance(@class, hasBase, true);
}
WriteStartBraceIndent();

Loading…
Cancel
Save