From ac7176f1b7d00cb8190a2d88a98bdd9200a101a7 Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 10 Jan 2015 18:56:15 +0000 Subject: [PATCH] Added parsing and AST support for C++ friend declarations. --- src/AST/ASTVisitor.cs | 8 + src/AST/Declaration.cs | 1 + src/AST/Friend.cs | 21 ++ src/Core/Parser/ASTConverter.cs | 22 ++ src/CppParser/AST.cpp | 14 + src/CppParser/AST.h | 15 +- src/CppParser/Bindings/CLI/AST.cpp | 50 +++ src/CppParser/Bindings/CLI/AST.h | 30 +- .../CSharp/i686-apple-darwin12.4.0/AST.cs | 301 ++++++++++++++---- .../Bindings/CSharp/i686-pc-win32-msvc/AST.cs | 301 ++++++++++++++---- .../Bindings/CSharp/x86_64-linux-gnu/AST.cs | 301 ++++++++++++++---- src/CppParser/Parser.cpp | 32 +- src/CppParser/Parser.h | 1 + src/Generator.Tests/AST/TestAST.cs | 5 + .../Generators/CLI/CLITypePrinter.cs | 5 + .../Generators/CSharp/CSharpTypePrinter.cs | 5 + .../CheckVirtualOverrideReturnCovariance.cs | 5 + src/Generator/Types/CppTypePrinter.cs | 5 + 18 files changed, 910 insertions(+), 212 deletions(-) create mode 100644 src/AST/Friend.cs diff --git a/src/AST/ASTVisitor.cs b/src/AST/ASTVisitor.cs index 0b07ae8c..0b20593c 100644 --- a/src/AST/ASTVisitor.cs +++ b/src/AST/ASTVisitor.cs @@ -293,6 +293,14 @@ namespace CppSharp.AST return property.Type.Visit(this); } + public bool VisitFriend(Friend friend) + { + if (!VisitDeclaration(friend)) + return false; + + return friend.Declaration.Visit(this); + } + public virtual bool VisitFunctionDecl(Function function) { if (!VisitDeclaration(function)) diff --git a/src/AST/Declaration.cs b/src/AST/Declaration.cs index 2f80d09d..33e37e55 100644 --- a/src/AST/Declaration.cs +++ b/src/AST/Declaration.cs @@ -381,5 +381,6 @@ namespace CppSharp.AST T VisitNamespace(Namespace @namespace); T VisitEvent(Event @event); T VisitProperty(Property @property); + T VisitFriend(Friend friend); } } diff --git a/src/AST/Friend.cs b/src/AST/Friend.cs new file mode 100644 index 00000000..a6ee26d2 --- /dev/null +++ b/src/AST/Friend.cs @@ -0,0 +1,21 @@ +namespace CppSharp.AST +{ + public class Friend : Declaration + { + public Declaration Declaration { get; set; } + + public Friend() + { + } + + public Friend(Declaration declaration) + { + Declaration = declaration; + } + + public override T Visit(IDeclVisitor visitor) + { + return visitor.VisitFriend(this); + } + } +} diff --git a/src/Core/Parser/ASTConverter.cs b/src/Core/Parser/ASTConverter.cs index 574b7409..5e84e342 100644 --- a/src/Core/Parser/ASTConverter.cs +++ b/src/Core/Parser/ASTConverter.cs @@ -129,6 +129,7 @@ namespace CppSharp public abstract TRet VisitEnumeration(Enumeration decl); public abstract TRet VisitEnumerationItem(Enumeration.Item decl); public abstract TRet VisitVariable(Variable decl); + public abstract TRet VisitFriend(Friend decl); public abstract TRet VisitField(Field decl); public abstract TRet VisitAccessSpecifier(AccessSpecifierDecl decl); public abstract TRet VisitClass(Class decl); @@ -190,6 +191,11 @@ namespace CppSharp var _decl = Variable.__CreateInstance(decl.__Instance); return VisitVariable(_decl); } + case DeclarationKind.Friend: + { + var _decl = Friend.__CreateInstance(decl.__Instance); + return VisitFriend(_decl); + } case DeclarationKind.Field: { var _decl = Field.__CreateInstance(decl.__Instance); @@ -788,6 +794,13 @@ namespace CppSharp _ctx.Variables.Add(_decl); } + for (uint i = 0; i < ctx.FriendsCount; ++i) + { + var decl = ctx.getFriends(i); + var _decl = Visit(decl) as AST.Friend; + _ctx.Declarations.Add(_decl); + } + // Anonymous types } @@ -1139,6 +1152,15 @@ namespace CppSharp return _variable; } + public override AST.Declaration VisitFriend(Friend decl) + { + var _friend = new AST.Friend(); + VisitDeclaration(decl, _friend); + _friend.Declaration = Visit(decl.Declaration); + + return _friend; + } + public override AST.Declaration VisitField(Field decl) { var _field = new AST.Field(); diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index 2ac1a3b0..b1f91a28 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -189,6 +189,7 @@ DEF_VECTOR(DeclarationContext, Class*, Classes) DEF_VECTOR(DeclarationContext, Template*, Templates) DEF_VECTOR(DeclarationContext, TypedefDecl*, Typedefs) DEF_VECTOR(DeclarationContext, Variable*, Variables) +DEF_VECTOR(DeclarationContext, Friend*, Friends) Declaration* DeclarationContext::FindAnonymous(const std::string& key) { @@ -451,8 +452,21 @@ Variable* DeclarationContext::FindVariable(const std::string& USR) return nullptr; } +Friend* DeclarationContext::FindFriend(const std::string& USR) +{ + auto found = std::find_if(Friends.begin(), Friends.end(), + [&](Friend* var) { return var->USR == USR; }); + + if (found != Friends.end()) + return *found; + + return nullptr; +} + TypedefDecl::TypedefDecl() : Declaration(DeclarationKind::Typedef) {} +Friend::Friend() : CppSharp::CppParser::AST::Declaration(DeclarationKind::Friend), Declaration(0) {} + DEF_STRING(Statement, String) Statement::Statement(const std::string& str, StatementClass stmtClass, Declaration* decl) : String(str), Class(stmtClass), Decl(decl) {} diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index 9c4cdd10..d52f5cfc 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -362,7 +362,8 @@ enum class DeclarationKind PreprocessedEntity, MacroDefinition, MacroExpansion, - TranslationUnit + TranslationUnit, + Friend, }; #define DECLARE_DECL_KIND(klass, kind) \ @@ -410,6 +411,7 @@ class Template; class ClassTemplate; class FunctionTemplate; class Variable; +class Friend; class CS_API DeclarationContext : public Declaration { @@ -440,6 +442,8 @@ public: CS_IGNORE Variable* FindVariable(const std::string& USR); + CS_IGNORE Friend* FindFriend(const std::string& USR); + VECTOR(Namespace*, Namespaces) VECTOR(Enumeration*, Enums) VECTOR(Function*, Functions) @@ -447,6 +451,8 @@ public: VECTOR(Template*, Templates) VECTOR(TypedefDecl*, Typedefs) VECTOR(Variable*, Variables) + VECTOR(Friend*, Friends) + std::map Anonymous; bool IsAnonymous; @@ -459,6 +465,13 @@ public: CppSharp::CppParser::AST::QualifiedType QualifiedType; }; +class CS_API Friend : public Declaration +{ +public: + DECLARE_DECL_KIND(Friend, Friend) + CppSharp::CppParser::AST::Declaration* Declaration; +}; + enum class StatementClass { Any, diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp index 6776813b..43669977 100644 --- a/src/CppParser/Bindings/CLI/AST.cpp +++ b/src/CppParser/Bindings/CLI/AST.cpp @@ -1425,6 +1425,24 @@ void CppSharp::Parser::AST::DeclarationContext::clearVariables() ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->clearVariables(); } +CppSharp::Parser::AST::Friend^ CppSharp::Parser::AST::DeclarationContext::getFriends(unsigned int i) +{ + auto __ret = ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->getFriends(i); + if (__ret == nullptr) return nullptr; + return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Friend((::CppSharp::CppParser::AST::Friend*)__ret); +} + +void CppSharp::Parser::AST::DeclarationContext::addFriends(CppSharp::Parser::AST::Friend^ s) +{ + auto arg0 = (::CppSharp::CppParser::AST::Friend*)s->NativePtr; + ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->addFriends(arg0); +} + +void CppSharp::Parser::AST::DeclarationContext::clearFriends() +{ + ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->clearFriends(); +} + unsigned int CppSharp::Parser::AST::DeclarationContext::NamespacesCount::get() { auto __ret = ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->getNamespacesCount(); @@ -1467,6 +1485,12 @@ unsigned int CppSharp::Parser::AST::DeclarationContext::VariablesCount::get() return __ret; } +unsigned int CppSharp::Parser::AST::DeclarationContext::FriendsCount::get() +{ + auto __ret = ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->getFriendsCount(); + return __ret; +} + bool CppSharp::Parser::AST::DeclarationContext::IsAnonymous::get() { return ((::CppSharp::CppParser::AST::DeclarationContext*)NativePtr)->IsAnonymous; @@ -1503,6 +1527,32 @@ void CppSharp::Parser::AST::TypedefDecl::QualifiedType::set(CppSharp::Parser::AS ((::CppSharp::CppParser::AST::TypedefDecl*)NativePtr)->QualifiedType = *(::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr; } +CppSharp::Parser::AST::Friend::Friend(::CppSharp::CppParser::AST::Friend* native) + : CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native) +{ +} + +CppSharp::Parser::AST::Friend^ CppSharp::Parser::AST::Friend::__CreateInstance(::System::IntPtr native) +{ + return gcnew CppSharp::Parser::AST::Friend((::CppSharp::CppParser::AST::Friend*) native.ToPointer()); +} + +CppSharp::Parser::AST::Friend::Friend() + : CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)nullptr) +{ + NativePtr = new ::CppSharp::CppParser::AST::Friend(); +} + +CppSharp::Parser::AST::Declaration^ CppSharp::Parser::AST::Friend::Declaration::get() +{ + return (((::CppSharp::CppParser::AST::Friend*)NativePtr)->Declaration == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)((::CppSharp::CppParser::AST::Friend*)NativePtr)->Declaration); +} + +void CppSharp::Parser::AST::Friend::Declaration::set(CppSharp::Parser::AST::Declaration^ value) +{ + ((::CppSharp::CppParser::AST::Friend*)NativePtr)->Declaration = (::CppSharp::CppParser::AST::Declaration*)value->NativePtr; +} + CppSharp::Parser::AST::Statement::Statement(::CppSharp::CppParser::AST::Statement* native) { NativePtr = native; diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h index 487310d9..602bd529 100644 --- a/src/CppParser/Bindings/CLI/AST.h +++ b/src/CppParser/Bindings/CLI/AST.h @@ -44,6 +44,7 @@ namespace CppSharp ref class Enumeration; ref class Expression; ref class Field; + ref class Friend; ref class FullComment; ref class Function; ref class FunctionTemplate; @@ -130,7 +131,8 @@ namespace CppSharp PreprocessedEntity = 17, MacroDefinition = 18, MacroExpansion = 19, - TranslationUnit = 20 + TranslationUnit = 20, + Friend = 21 }; public enum struct AccessSpecifier @@ -1113,6 +1115,11 @@ namespace CppSharp unsigned int get(); } + property unsigned int FriendsCount + { + unsigned int get(); + } + property bool IsAnonymous { bool get(); @@ -1160,6 +1167,12 @@ namespace CppSharp void addVariables(CppSharp::Parser::AST::Variable^ s); void clearVariables(); + + CppSharp::Parser::AST::Friend^ getFriends(unsigned int i); + + void addFriends(CppSharp::Parser::AST::Friend^ s); + + void clearFriends(); }; public ref class TypedefDecl : CppSharp::Parser::AST::Declaration @@ -1177,6 +1190,21 @@ namespace CppSharp } }; + public ref class Friend : CppSharp::Parser::AST::Declaration + { + public: + + Friend(::CppSharp::CppParser::AST::Friend* native); + static Friend^ __CreateInstance(::System::IntPtr native); + Friend(); + + property CppSharp::Parser::AST::Declaration^ Declaration + { + CppSharp::Parser::AST::Declaration^ get(); + void set(CppSharp::Parser::AST::Declaration^); + } + }; + public ref class Statement : ICppInstance { public: diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs index 532ea0b1..6d7188aa 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs @@ -53,7 +53,8 @@ namespace CppSharp PreprocessedEntity = 17, MacroDefinition = 18, MacroExpansion = 19, - TranslationUnit = 20 + TranslationUnit = 20, + Friend = 21 } public enum AccessSpecifier @@ -3368,7 +3369,7 @@ namespace CppSharp public unsafe partial class DeclarationContext : CppSharp.Parser.AST.Declaration, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 184)] + [StructLayout(LayoutKind.Explicit, Size = 196)] public new partial struct Internal { [FieldOffset(0)] @@ -3401,7 +3402,7 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; [SuppressUnmanagedCodeSecurity] @@ -3524,6 +3525,21 @@ namespace CppSharp EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext14clearVariablesEv")] internal static extern void clearVariables_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext10getFriendsEj")] + internal static extern global::System.IntPtr getFriends_0(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext10addFriendsERPNS1_6FriendE")] + internal static extern void addFriends_0(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext12clearFriendsEv")] + internal static extern void clearFriends_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext18getNamespacesCountEv")] @@ -3558,6 +3574,11 @@ namespace CppSharp [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext17getVariablesCountEv")] internal static extern uint getVariablesCount_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext15getFriendsCountEv")] + internal static extern uint getFriendsCount_0(global::System.IntPtr instance); } private readonly bool __ownsNativeInstance; @@ -3574,7 +3595,7 @@ namespace CppSharp private static DeclarationContext.Internal* __CopyValue(DeclarationContext.Internal native) { - var ret = Marshal.AllocHGlobal(184); + var ret = Marshal.AllocHGlobal(196); CppSharp.Parser.AST.DeclarationContext.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (DeclarationContext.Internal*) ret; } @@ -3593,7 +3614,7 @@ namespace CppSharp public DeclarationContext(CppSharp.Parser.AST.DeclarationKind kind) : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(184); + __Instance = Marshal.AllocHGlobal(196); __ownsNativeInstance = true; var arg0 = kind; Internal.ctor_0(__Instance, arg0); @@ -3734,6 +3755,24 @@ namespace CppSharp Internal.clearVariables_0(__Instance); } + public CppSharp.Parser.AST.Friend getFriends(uint i) + { + var __ret = Internal.getFriends_0(__Instance, i); + if (__ret == global::System.IntPtr.Zero) return null; + return (__ret == IntPtr.Zero) ? null : CppSharp.Parser.AST.Friend.__CreateInstance(__ret); + } + + public void addFriends(CppSharp.Parser.AST.Friend s) + { + var arg0 = ReferenceEquals(s, null) ? global::System.IntPtr.Zero : s.__Instance; + Internal.addFriends_0(__Instance, arg0); + } + + public void clearFriends() + { + Internal.clearFriends_0(__Instance); + } + public uint NamespacesCount { get @@ -3797,6 +3836,15 @@ namespace CppSharp } } + public uint FriendsCount + { + get + { + var __ret = Internal.getFriendsCount_0(__Instance); + return __ret; + } + } + public bool IsAnonymous { get @@ -3926,6 +3974,121 @@ namespace CppSharp } } + public unsafe partial class Friend : CppSharp.Parser.AST.Declaration, IDisposable + { + [StructLayout(LayoutKind.Explicit, Size = 88)] + public new partial struct Internal + { + [FieldOffset(0)] + public CppSharp.Parser.AST.DeclarationKind Kind; + + [FieldOffset(4)] + public CppSharp.Parser.AST.AccessSpecifier Access; + + [FieldOffset(8)] + public global::System.IntPtr _Namespace; + + [FieldOffset(12)] + public CppSharp.Parser.SourceLocation.Internal Location; + + [FieldOffset(28)] + public global::System.IntPtr Comment; + + [FieldOffset(44)] + public bool IsIncomplete; + + [FieldOffset(45)] + public bool IsDependent; + + [FieldOffset(48)] + public global::System.IntPtr CompleteDeclaration; + + [FieldOffset(52)] + public uint DefinitionOrder; + + [FieldOffset(68)] + public global::System.IntPtr OriginalPtr; + + [FieldOffset(84)] + public global::System.IntPtr Declaration; + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendC2Ev")] + internal static extern void ctor_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendC2ERKS2_")] + internal static extern void cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendD2Ev")] + internal static extern void dtor_0(global::System.IntPtr instance); + } + + private readonly bool __ownsNativeInstance; + + public static new Friend __CreateInstance(global::System.IntPtr native) + { + return new Friend((Friend.Internal*) native); + } + + public static Friend __CreateInstance(Friend.Internal native) + { + return new Friend(native); + } + + private static Friend.Internal* __CopyValue(Friend.Internal native) + { + var ret = Marshal.AllocHGlobal(88); + CppSharp.Parser.AST.Friend.Internal.cctor_2(ret, new global::System.IntPtr(&native)); + return (Friend.Internal*) ret; + } + + private Friend(Friend.Internal native) + : this(__CopyValue(native)) + { + __ownsNativeInstance = true; + } + + protected Friend(Friend.Internal* native, bool isInternalImpl = false) + : base((Declaration.Internal*) native) + { + } + + public Friend() + : this((Internal*) null) + { + __Instance = Marshal.AllocHGlobal(88); + __ownsNativeInstance = true; + Internal.ctor_0(__Instance); + } + + protected override void Dispose(bool disposing) + { + if (__ownsNativeInstance) + { + Marshal.FreeHGlobal(__Instance); + } + base.Dispose(disposing); + } + + public CppSharp.Parser.AST.Declaration Declaration + { + get + { + return (((Internal*) __Instance)->Declaration == IntPtr.Zero) ? null : CppSharp.Parser.AST.Declaration.__CreateInstance(((Internal*) __Instance)->Declaration); + } + + set + { + ((Internal*) __Instance)->Declaration = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance; + } + } + } + public unsafe partial class Statement : IDisposable { [StructLayout(LayoutKind.Explicit, Size = 20)] @@ -4989,7 +5152,7 @@ namespace CppSharp public unsafe partial class Enumeration : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 208)] + [StructLayout(LayoutKind.Explicit, Size = 220)] public new partial struct Internal { [FieldOffset(0)] @@ -5022,16 +5185,16 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(184)] + [FieldOffset(196)] public CppSharp.Parser.AST.Enumeration.EnumModifiers Modifiers; - [FieldOffset(188)] + [FieldOffset(200)] public global::System.IntPtr Type; - [FieldOffset(192)] + [FieldOffset(204)] public global::System.IntPtr BuiltinType; [SuppressUnmanagedCodeSecurity] @@ -5234,7 +5397,7 @@ namespace CppSharp private static Enumeration.Internal* __CopyValue(Enumeration.Internal native) { - var ret = Marshal.AllocHGlobal(208); + var ret = Marshal.AllocHGlobal(220); CppSharp.Parser.AST.Enumeration.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (Enumeration.Internal*) ret; } @@ -5253,7 +5416,7 @@ namespace CppSharp public Enumeration() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(208); + __Instance = Marshal.AllocHGlobal(220); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -5874,7 +6037,7 @@ namespace CppSharp public unsafe partial class Class : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 248)] + [StructLayout(LayoutKind.Explicit, Size = 260)] public new partial struct Internal { [FieldOffset(0)] @@ -5907,37 +6070,37 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(232)] + [FieldOffset(244)] public bool IsPOD; - [FieldOffset(233)] + [FieldOffset(245)] public bool IsAbstract; - [FieldOffset(234)] + [FieldOffset(246)] public bool IsUnion; - [FieldOffset(235)] + [FieldOffset(247)] public bool IsDynamic; - [FieldOffset(236)] + [FieldOffset(248)] public bool IsPolymorphic; - [FieldOffset(237)] + [FieldOffset(249)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(238)] + [FieldOffset(250)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(239)] + [FieldOffset(251)] public bool HasNonTrivialDestructor; - [FieldOffset(240)] + [FieldOffset(252)] public bool IsExternCContext; - [FieldOffset(244)] + [FieldOffset(256)] public global::System.IntPtr Layout; [SuppressUnmanagedCodeSecurity] @@ -6050,7 +6213,7 @@ namespace CppSharp private static Class.Internal* __CopyValue(Class.Internal native) { - var ret = Marshal.AllocHGlobal(248); + var ret = Marshal.AllocHGlobal(260); CppSharp.Parser.AST.Class.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (Class.Internal*) ret; } @@ -6069,7 +6232,7 @@ namespace CppSharp public Class() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(248); + __Instance = Marshal.AllocHGlobal(260); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6649,7 +6812,7 @@ namespace CppSharp public unsafe partial class ClassTemplateSpecialization : CppSharp.Parser.AST.Class, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 268)] + [StructLayout(LayoutKind.Explicit, Size = 280)] public new partial struct Internal { [FieldOffset(0)] @@ -6682,43 +6845,43 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(232)] + [FieldOffset(244)] public bool IsPOD; - [FieldOffset(233)] + [FieldOffset(245)] public bool IsAbstract; - [FieldOffset(234)] + [FieldOffset(246)] public bool IsUnion; - [FieldOffset(235)] + [FieldOffset(247)] public bool IsDynamic; - [FieldOffset(236)] + [FieldOffset(248)] public bool IsPolymorphic; - [FieldOffset(237)] + [FieldOffset(249)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(238)] + [FieldOffset(250)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(239)] + [FieldOffset(251)] public bool HasNonTrivialDestructor; - [FieldOffset(240)] + [FieldOffset(252)] public bool IsExternCContext; - [FieldOffset(244)] + [FieldOffset(256)] public global::System.IntPtr Layout; - [FieldOffset(248)] + [FieldOffset(260)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(264)] + [FieldOffset(276)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6771,7 +6934,7 @@ namespace CppSharp private static ClassTemplateSpecialization.Internal* __CopyValue(ClassTemplateSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(268); + var ret = Marshal.AllocHGlobal(280); CppSharp.Parser.AST.ClassTemplateSpecialization.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (ClassTemplateSpecialization.Internal*) ret; } @@ -6790,7 +6953,7 @@ namespace CppSharp public ClassTemplateSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(268); + __Instance = Marshal.AllocHGlobal(280); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6860,7 +7023,7 @@ namespace CppSharp public unsafe partial class ClassTemplatePartialSpecialization : CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 268)] + [StructLayout(LayoutKind.Explicit, Size = 280)] public new partial struct Internal { [FieldOffset(0)] @@ -6893,43 +7056,43 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(232)] + [FieldOffset(244)] public bool IsPOD; - [FieldOffset(233)] + [FieldOffset(245)] public bool IsAbstract; - [FieldOffset(234)] + [FieldOffset(246)] public bool IsUnion; - [FieldOffset(235)] + [FieldOffset(247)] public bool IsDynamic; - [FieldOffset(236)] + [FieldOffset(248)] public bool IsPolymorphic; - [FieldOffset(237)] + [FieldOffset(249)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(238)] + [FieldOffset(250)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(239)] + [FieldOffset(251)] public bool HasNonTrivialDestructor; - [FieldOffset(240)] + [FieldOffset(252)] public bool IsExternCContext; - [FieldOffset(244)] + [FieldOffset(256)] public global::System.IntPtr Layout; - [FieldOffset(248)] + [FieldOffset(260)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(264)] + [FieldOffset(276)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6962,7 +7125,7 @@ namespace CppSharp private static ClassTemplatePartialSpecialization.Internal* __CopyValue(ClassTemplatePartialSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(268); + var ret = Marshal.AllocHGlobal(280); CppSharp.Parser.AST.ClassTemplatePartialSpecialization.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (ClassTemplatePartialSpecialization.Internal*) ret; } @@ -6981,7 +7144,7 @@ namespace CppSharp public ClassTemplatePartialSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(268); + __Instance = Marshal.AllocHGlobal(280); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7318,7 +7481,7 @@ namespace CppSharp public unsafe partial class Namespace : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 184)] + [StructLayout(LayoutKind.Explicit, Size = 196)] public new partial struct Internal { [FieldOffset(0)] @@ -7351,10 +7514,10 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(181)] + [FieldOffset(193)] public bool IsInline; [SuppressUnmanagedCodeSecurity] @@ -7387,7 +7550,7 @@ namespace CppSharp private static Namespace.Internal* __CopyValue(Namespace.Internal native) { - var ret = Marshal.AllocHGlobal(184); + var ret = Marshal.AllocHGlobal(196); CppSharp.Parser.AST.Namespace.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (Namespace.Internal*) ret; } @@ -7406,7 +7569,7 @@ namespace CppSharp public Namespace() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(184); + __Instance = Marshal.AllocHGlobal(196); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7825,7 +7988,7 @@ namespace CppSharp public unsafe partial class TranslationUnit : CppSharp.Parser.AST.Namespace, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 212)] + [StructLayout(LayoutKind.Explicit, Size = 224)] public new partial struct Internal { [FieldOffset(0)] @@ -7858,13 +8021,13 @@ namespace CppSharp [FieldOffset(68)] public global::System.IntPtr OriginalPtr; - [FieldOffset(180)] + [FieldOffset(192)] public bool IsAnonymous; - [FieldOffset(181)] + [FieldOffset(193)] public bool IsInline; - [FieldOffset(196)] + [FieldOffset(208)] public bool IsSystemHeader; [SuppressUnmanagedCodeSecurity] @@ -7927,7 +8090,7 @@ namespace CppSharp private static TranslationUnit.Internal* __CopyValue(TranslationUnit.Internal native) { - var ret = Marshal.AllocHGlobal(212); + var ret = Marshal.AllocHGlobal(224); CppSharp.Parser.AST.TranslationUnit.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (TranslationUnit.Internal*) ret; } @@ -7946,7 +8109,7 @@ namespace CppSharp public TranslationUnit() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(212); + __Instance = Marshal.AllocHGlobal(224); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs index d8502bf9..d520aac4 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs @@ -53,7 +53,8 @@ namespace CppSharp PreprocessedEntity = 17, MacroDefinition = 18, MacroExpansion = 19, - TranslationUnit = 20 + TranslationUnit = 20, + Friend = 21 } public enum AccessSpecifier @@ -3368,7 +3369,7 @@ namespace CppSharp public unsafe partial class DeclarationContext : CppSharp.Parser.AST.Declaration, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 216)] + [StructLayout(LayoutKind.Explicit, Size = 228)] public new partial struct Internal { [FieldOffset(0)] @@ -3401,7 +3402,7 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; [SuppressUnmanagedCodeSecurity] @@ -3524,6 +3525,21 @@ namespace CppSharp EntryPoint="?clearVariables@DeclarationContext@AST@CppParser@CppSharp@@QAEXXZ")] internal static extern void clearVariables_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?getFriends@DeclarationContext@AST@CppParser@CppSharp@@QAEPAVFriend@234@I@Z")] + internal static extern global::System.IntPtr getFriends_0(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?addFriends@DeclarationContext@AST@CppParser@CppSharp@@QAEXAAPAVFriend@234@@Z")] + internal static extern void addFriends_0(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?clearFriends@DeclarationContext@AST@CppParser@CppSharp@@QAEXXZ")] + internal static extern void clearFriends_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="?getNamespacesCount@DeclarationContext@AST@CppParser@CppSharp@@QAEIXZ")] @@ -3558,6 +3574,11 @@ namespace CppSharp [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="?getVariablesCount@DeclarationContext@AST@CppParser@CppSharp@@QAEIXZ")] internal static extern uint getVariablesCount_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?getFriendsCount@DeclarationContext@AST@CppParser@CppSharp@@QAEIXZ")] + internal static extern uint getFriendsCount_0(global::System.IntPtr instance); } private readonly bool __ownsNativeInstance; @@ -3574,7 +3595,7 @@ namespace CppSharp private static DeclarationContext.Internal* __CopyValue(DeclarationContext.Internal native) { - var ret = Marshal.AllocHGlobal(216); + var ret = Marshal.AllocHGlobal(228); CppSharp.Parser.AST.DeclarationContext.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (DeclarationContext.Internal*) ret; } @@ -3593,7 +3614,7 @@ namespace CppSharp public DeclarationContext(CppSharp.Parser.AST.DeclarationKind kind) : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(216); + __Instance = Marshal.AllocHGlobal(228); __ownsNativeInstance = true; var arg0 = kind; Internal.ctor_0(__Instance, arg0); @@ -3734,6 +3755,24 @@ namespace CppSharp Internal.clearVariables_0(__Instance); } + public CppSharp.Parser.AST.Friend getFriends(uint i) + { + var __ret = Internal.getFriends_0(__Instance, i); + if (__ret == global::System.IntPtr.Zero) return null; + return (__ret == IntPtr.Zero) ? null : CppSharp.Parser.AST.Friend.__CreateInstance(__ret); + } + + public void addFriends(CppSharp.Parser.AST.Friend s) + { + var arg0 = ReferenceEquals(s, null) ? global::System.IntPtr.Zero : s.__Instance; + Internal.addFriends_0(__Instance, arg0); + } + + public void clearFriends() + { + Internal.clearFriends_0(__Instance); + } + public uint NamespacesCount { get @@ -3797,6 +3836,15 @@ namespace CppSharp } } + public uint FriendsCount + { + get + { + var __ret = Internal.getFriendsCount_0(__Instance); + return __ret; + } + } + public bool IsAnonymous { get @@ -3926,6 +3974,121 @@ namespace CppSharp } } + public unsafe partial class Friend : CppSharp.Parser.AST.Declaration, IDisposable + { + [StructLayout(LayoutKind.Explicit, Size = 124)] + public new partial struct Internal + { + [FieldOffset(0)] + public CppSharp.Parser.AST.DeclarationKind Kind; + + [FieldOffset(4)] + public CppSharp.Parser.AST.AccessSpecifier Access; + + [FieldOffset(8)] + public global::System.IntPtr _Namespace; + + [FieldOffset(12)] + public CppSharp.Parser.SourceLocation.Internal Location; + + [FieldOffset(40)] + public global::System.IntPtr Comment; + + [FieldOffset(68)] + public bool IsIncomplete; + + [FieldOffset(69)] + public bool IsDependent; + + [FieldOffset(72)] + public global::System.IntPtr CompleteDeclaration; + + [FieldOffset(76)] + public uint DefinitionOrder; + + [FieldOffset(92)] + public global::System.IntPtr OriginalPtr; + + [FieldOffset(120)] + public global::System.IntPtr Declaration; + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="??0Friend@AST@CppParser@CppSharp@@QAE@XZ")] + internal static extern global::System.IntPtr ctor_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="??0Friend@AST@CppParser@CppSharp@@QAE@ABV0123@@Z")] + internal static extern global::System.IntPtr cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="??1Friend@AST@CppParser@CppSharp@@QAE@XZ")] + internal static extern void dtor_0(global::System.IntPtr instance); + } + + private readonly bool __ownsNativeInstance; + + public static new Friend __CreateInstance(global::System.IntPtr native) + { + return new Friend((Friend.Internal*) native); + } + + public static Friend __CreateInstance(Friend.Internal native) + { + return new Friend(native); + } + + private static Friend.Internal* __CopyValue(Friend.Internal native) + { + var ret = Marshal.AllocHGlobal(124); + CppSharp.Parser.AST.Friend.Internal.cctor_2(ret, new global::System.IntPtr(&native)); + return (Friend.Internal*) ret; + } + + private Friend(Friend.Internal native) + : this(__CopyValue(native)) + { + __ownsNativeInstance = true; + } + + protected Friend(Friend.Internal* native, bool isInternalImpl = false) + : base((Declaration.Internal*) native) + { + } + + public Friend() + : this((Internal*) null) + { + __Instance = Marshal.AllocHGlobal(124); + __ownsNativeInstance = true; + Internal.ctor_0(__Instance); + } + + protected override void Dispose(bool disposing) + { + if (__ownsNativeInstance) + { + Marshal.FreeHGlobal(__Instance); + } + base.Dispose(disposing); + } + + public CppSharp.Parser.AST.Declaration Declaration + { + get + { + return (((Internal*) __Instance)->Declaration == IntPtr.Zero) ? null : CppSharp.Parser.AST.Declaration.__CreateInstance(((Internal*) __Instance)->Declaration); + } + + set + { + ((Internal*) __Instance)->Declaration = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance; + } + } + } + public unsafe partial class Statement : IDisposable { [StructLayout(LayoutKind.Explicit, Size = 32)] @@ -4989,7 +5152,7 @@ namespace CppSharp public unsafe partial class Enumeration : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 240)] + [StructLayout(LayoutKind.Explicit, Size = 252)] public new partial struct Internal { [FieldOffset(0)] @@ -5022,16 +5185,16 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(216)] + [FieldOffset(228)] public CppSharp.Parser.AST.Enumeration.EnumModifiers Modifiers; - [FieldOffset(220)] + [FieldOffset(232)] public global::System.IntPtr Type; - [FieldOffset(224)] + [FieldOffset(236)] public global::System.IntPtr BuiltinType; [SuppressUnmanagedCodeSecurity] @@ -5234,7 +5397,7 @@ namespace CppSharp private static Enumeration.Internal* __CopyValue(Enumeration.Internal native) { - var ret = Marshal.AllocHGlobal(240); + var ret = Marshal.AllocHGlobal(252); CppSharp.Parser.AST.Enumeration.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (Enumeration.Internal*) ret; } @@ -5253,7 +5416,7 @@ namespace CppSharp public Enumeration() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(240); + __Instance = Marshal.AllocHGlobal(252); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -5874,7 +6037,7 @@ namespace CppSharp public unsafe partial class Class : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 280)] + [StructLayout(LayoutKind.Explicit, Size = 292)] public new partial struct Internal { [FieldOffset(0)] @@ -5907,37 +6070,37 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(264)] + [FieldOffset(276)] public bool IsPOD; - [FieldOffset(265)] + [FieldOffset(277)] public bool IsAbstract; - [FieldOffset(266)] + [FieldOffset(278)] public bool IsUnion; - [FieldOffset(267)] + [FieldOffset(279)] public bool IsDynamic; - [FieldOffset(268)] + [FieldOffset(280)] public bool IsPolymorphic; - [FieldOffset(269)] + [FieldOffset(281)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(270)] + [FieldOffset(282)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(271)] + [FieldOffset(283)] public bool HasNonTrivialDestructor; - [FieldOffset(272)] + [FieldOffset(284)] public bool IsExternCContext; - [FieldOffset(276)] + [FieldOffset(288)] public global::System.IntPtr Layout; [SuppressUnmanagedCodeSecurity] @@ -6050,7 +6213,7 @@ namespace CppSharp private static Class.Internal* __CopyValue(Class.Internal native) { - var ret = Marshal.AllocHGlobal(280); + var ret = Marshal.AllocHGlobal(292); CppSharp.Parser.AST.Class.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (Class.Internal*) ret; } @@ -6069,7 +6232,7 @@ namespace CppSharp public Class() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(280); + __Instance = Marshal.AllocHGlobal(292); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6649,7 +6812,7 @@ namespace CppSharp public unsafe partial class ClassTemplateSpecialization : CppSharp.Parser.AST.Class, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 300)] + [StructLayout(LayoutKind.Explicit, Size = 312)] public new partial struct Internal { [FieldOffset(0)] @@ -6682,43 +6845,43 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(264)] + [FieldOffset(276)] public bool IsPOD; - [FieldOffset(265)] + [FieldOffset(277)] public bool IsAbstract; - [FieldOffset(266)] + [FieldOffset(278)] public bool IsUnion; - [FieldOffset(267)] + [FieldOffset(279)] public bool IsDynamic; - [FieldOffset(268)] + [FieldOffset(280)] public bool IsPolymorphic; - [FieldOffset(269)] + [FieldOffset(281)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(270)] + [FieldOffset(282)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(271)] + [FieldOffset(283)] public bool HasNonTrivialDestructor; - [FieldOffset(272)] + [FieldOffset(284)] public bool IsExternCContext; - [FieldOffset(276)] + [FieldOffset(288)] public global::System.IntPtr Layout; - [FieldOffset(280)] + [FieldOffset(292)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(296)] + [FieldOffset(308)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6771,7 +6934,7 @@ namespace CppSharp private static ClassTemplateSpecialization.Internal* __CopyValue(ClassTemplateSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(300); + var ret = Marshal.AllocHGlobal(312); CppSharp.Parser.AST.ClassTemplateSpecialization.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (ClassTemplateSpecialization.Internal*) ret; } @@ -6790,7 +6953,7 @@ namespace CppSharp public ClassTemplateSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(300); + __Instance = Marshal.AllocHGlobal(312); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6860,7 +7023,7 @@ namespace CppSharp public unsafe partial class ClassTemplatePartialSpecialization : CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 300)] + [StructLayout(LayoutKind.Explicit, Size = 312)] public new partial struct Internal { [FieldOffset(0)] @@ -6893,43 +7056,43 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(264)] + [FieldOffset(276)] public bool IsPOD; - [FieldOffset(265)] + [FieldOffset(277)] public bool IsAbstract; - [FieldOffset(266)] + [FieldOffset(278)] public bool IsUnion; - [FieldOffset(267)] + [FieldOffset(279)] public bool IsDynamic; - [FieldOffset(268)] + [FieldOffset(280)] public bool IsPolymorphic; - [FieldOffset(269)] + [FieldOffset(281)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(270)] + [FieldOffset(282)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(271)] + [FieldOffset(283)] public bool HasNonTrivialDestructor; - [FieldOffset(272)] + [FieldOffset(284)] public bool IsExternCContext; - [FieldOffset(276)] + [FieldOffset(288)] public global::System.IntPtr Layout; - [FieldOffset(280)] + [FieldOffset(292)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(296)] + [FieldOffset(308)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6962,7 +7125,7 @@ namespace CppSharp private static ClassTemplatePartialSpecialization.Internal* __CopyValue(ClassTemplatePartialSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(300); + var ret = Marshal.AllocHGlobal(312); CppSharp.Parser.AST.ClassTemplatePartialSpecialization.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (ClassTemplatePartialSpecialization.Internal*) ret; } @@ -6981,7 +7144,7 @@ namespace CppSharp public ClassTemplatePartialSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(300); + __Instance = Marshal.AllocHGlobal(312); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7318,7 +7481,7 @@ namespace CppSharp public unsafe partial class Namespace : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 220)] + [StructLayout(LayoutKind.Explicit, Size = 232)] public new partial struct Internal { [FieldOffset(0)] @@ -7351,10 +7514,10 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(216)] + [FieldOffset(228)] public bool IsInline; [SuppressUnmanagedCodeSecurity] @@ -7387,7 +7550,7 @@ namespace CppSharp private static Namespace.Internal* __CopyValue(Namespace.Internal native) { - var ret = Marshal.AllocHGlobal(220); + var ret = Marshal.AllocHGlobal(232); CppSharp.Parser.AST.Namespace.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (Namespace.Internal*) ret; } @@ -7406,7 +7569,7 @@ namespace CppSharp public Namespace() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(220); + __Instance = Marshal.AllocHGlobal(232); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7825,7 +7988,7 @@ namespace CppSharp public unsafe partial class TranslationUnit : CppSharp.Parser.AST.Namespace, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 260)] + [StructLayout(LayoutKind.Explicit, Size = 272)] public new partial struct Internal { [FieldOffset(0)] @@ -7858,13 +8021,13 @@ namespace CppSharp [FieldOffset(92)] public global::System.IntPtr OriginalPtr; - [FieldOffset(212)] + [FieldOffset(224)] public bool IsAnonymous; - [FieldOffset(216)] + [FieldOffset(228)] public bool IsInline; - [FieldOffset(244)] + [FieldOffset(256)] public bool IsSystemHeader; [SuppressUnmanagedCodeSecurity] @@ -7927,7 +8090,7 @@ namespace CppSharp private static TranslationUnit.Internal* __CopyValue(TranslationUnit.Internal native) { - var ret = Marshal.AllocHGlobal(260); + var ret = Marshal.AllocHGlobal(272); CppSharp.Parser.AST.TranslationUnit.Internal.cctor_2(ret, new global::System.IntPtr(&native)); return (TranslationUnit.Internal*) ret; } @@ -7946,7 +8109,7 @@ namespace CppSharp public TranslationUnit() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(260); + __Instance = Marshal.AllocHGlobal(272); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs index 7d6e7540..88854053 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs @@ -53,7 +53,8 @@ namespace CppSharp PreprocessedEntity = 17, MacroDefinition = 18, MacroExpansion = 19, - TranslationUnit = 20 + TranslationUnit = 20, + Friend = 21 } public enum AccessSpecifier @@ -3367,7 +3368,7 @@ namespace CppSharp public unsafe partial class DeclarationContext : CppSharp.Parser.AST.Declaration, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 336)] + [StructLayout(LayoutKind.Explicit, Size = 360)] public new partial struct Internal { [FieldOffset(0)] @@ -3400,7 +3401,7 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; [SuppressUnmanagedCodeSecurity] @@ -3523,6 +3524,21 @@ namespace CppSharp EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext14clearVariablesEv")] internal static extern void clearVariables_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext10getFriendsEj")] + internal static extern global::System.IntPtr getFriends_0(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext10addFriendsERPNS1_6FriendE")] + internal static extern void addFriends_0(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext12clearFriendsEv")] + internal static extern void clearFriends_0(global::System.IntPtr instance); + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext18getNamespacesCountEv")] @@ -3557,6 +3573,11 @@ namespace CppSharp [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext17getVariablesCountEv")] internal static extern uint getVariablesCount_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST18DeclarationContext15getFriendsCountEv")] + internal static extern uint getFriendsCount_0(global::System.IntPtr instance); } private readonly bool __ownsNativeInstance; @@ -3573,7 +3594,7 @@ namespace CppSharp private static DeclarationContext.Internal* __CopyValue(DeclarationContext.Internal native) { - var ret = Marshal.AllocHGlobal(336); + var ret = Marshal.AllocHGlobal(360); CppSharp.Parser.AST.DeclarationContext.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (DeclarationContext.Internal*) ret; } @@ -3592,7 +3613,7 @@ namespace CppSharp public DeclarationContext(CppSharp.Parser.AST.DeclarationKind kind) : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(336); + __Instance = Marshal.AllocHGlobal(360); __ownsNativeInstance = true; var arg0 = kind; Internal.ctor_0(__Instance, arg0); @@ -3733,6 +3754,24 @@ namespace CppSharp Internal.clearVariables_0(__Instance); } + public CppSharp.Parser.AST.Friend getFriends(uint i) + { + var __ret = Internal.getFriends_0(__Instance, i); + if (__ret == global::System.IntPtr.Zero) return null; + return (__ret == IntPtr.Zero) ? null : CppSharp.Parser.AST.Friend.__CreateInstance(__ret); + } + + public void addFriends(CppSharp.Parser.AST.Friend s) + { + var arg0 = ReferenceEquals(s, null) ? global::System.IntPtr.Zero : s.__Instance; + Internal.addFriends_0(__Instance, arg0); + } + + public void clearFriends() + { + Internal.clearFriends_0(__Instance); + } + public uint NamespacesCount { get @@ -3796,6 +3835,15 @@ namespace CppSharp } } + public uint FriendsCount + { + get + { + var __ret = Internal.getFriendsCount_0(__Instance); + return __ret; + } + } + public bool IsAnonymous { get @@ -3925,6 +3973,121 @@ namespace CppSharp } } + public unsafe partial class Friend : CppSharp.Parser.AST.Declaration, IDisposable + { + [StructLayout(LayoutKind.Explicit, Size = 120)] + public new partial struct Internal + { + [FieldOffset(0)] + public CppSharp.Parser.AST.DeclarationKind Kind; + + [FieldOffset(4)] + public CppSharp.Parser.AST.AccessSpecifier Access; + + [FieldOffset(8)] + public global::System.IntPtr _Namespace; + + [FieldOffset(16)] + public CppSharp.Parser.SourceLocation.Internal Location; + + [FieldOffset(32)] + public global::System.IntPtr Comment; + + [FieldOffset(48)] + public bool IsIncomplete; + + [FieldOffset(49)] + public bool IsDependent; + + [FieldOffset(56)] + public global::System.IntPtr CompleteDeclaration; + + [FieldOffset(64)] + public uint DefinitionOrder; + + [FieldOffset(96)] + public global::System.IntPtr OriginalPtr; + + [FieldOffset(112)] + public global::System.IntPtr Declaration; + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendC2Ev")] + internal static extern void ctor_0(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendC2ERKS2_")] + internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6FriendD2Ev")] + internal static extern void dtor_0(global::System.IntPtr instance); + } + + private readonly bool __ownsNativeInstance; + + public static new Friend __CreateInstance(global::System.IntPtr native) + { + return new Friend((Friend.Internal*) native); + } + + public static Friend __CreateInstance(Friend.Internal native) + { + return new Friend(native); + } + + private static Friend.Internal* __CopyValue(Friend.Internal native) + { + var ret = Marshal.AllocHGlobal(120); + CppSharp.Parser.AST.Friend.Internal.cctor_1(ret, new global::System.IntPtr(&native)); + return (Friend.Internal*) ret; + } + + private Friend(Friend.Internal native) + : this(__CopyValue(native)) + { + __ownsNativeInstance = true; + } + + protected Friend(Friend.Internal* native, bool isInternalImpl = false) + : base((Declaration.Internal*) native) + { + } + + public Friend() + : this((Internal*) null) + { + __Instance = Marshal.AllocHGlobal(120); + __ownsNativeInstance = true; + Internal.ctor_0(__Instance); + } + + protected override void Dispose(bool disposing) + { + if (__ownsNativeInstance) + { + Marshal.FreeHGlobal(__Instance); + } + base.Dispose(disposing); + } + + public CppSharp.Parser.AST.Declaration Declaration + { + get + { + return (((Internal*) __Instance)->Declaration == IntPtr.Zero) ? null : CppSharp.Parser.AST.Declaration.__CreateInstance(((Internal*) __Instance)->Declaration); + } + + set + { + ((Internal*) __Instance)->Declaration = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance; + } + } + } + public unsafe partial class Statement : IDisposable { [StructLayout(LayoutKind.Explicit, Size = 24)] @@ -4988,7 +5151,7 @@ namespace CppSharp public unsafe partial class Enumeration : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 376)] + [StructLayout(LayoutKind.Explicit, Size = 400)] public new partial struct Internal { [FieldOffset(0)] @@ -5021,16 +5184,16 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(332)] + [FieldOffset(356)] public CppSharp.Parser.AST.Enumeration.EnumModifiers Modifiers; - [FieldOffset(336)] + [FieldOffset(360)] public global::System.IntPtr Type; - [FieldOffset(344)] + [FieldOffset(368)] public global::System.IntPtr BuiltinType; [SuppressUnmanagedCodeSecurity] @@ -5233,7 +5396,7 @@ namespace CppSharp private static Enumeration.Internal* __CopyValue(Enumeration.Internal native) { - var ret = Marshal.AllocHGlobal(376); + var ret = Marshal.AllocHGlobal(400); CppSharp.Parser.AST.Enumeration.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (Enumeration.Internal*) ret; } @@ -5252,7 +5415,7 @@ namespace CppSharp public Enumeration() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(376); + __Instance = Marshal.AllocHGlobal(400); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -5873,7 +6036,7 @@ namespace CppSharp public unsafe partial class Class : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 456)] + [StructLayout(LayoutKind.Explicit, Size = 480)] public new partial struct Internal { [FieldOffset(0)] @@ -5906,37 +6069,37 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(432)] + [FieldOffset(456)] public bool IsPOD; - [FieldOffset(433)] + [FieldOffset(457)] public bool IsAbstract; - [FieldOffset(434)] + [FieldOffset(458)] public bool IsUnion; - [FieldOffset(435)] + [FieldOffset(459)] public bool IsDynamic; - [FieldOffset(436)] + [FieldOffset(460)] public bool IsPolymorphic; - [FieldOffset(437)] + [FieldOffset(461)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(438)] + [FieldOffset(462)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(439)] + [FieldOffset(463)] public bool HasNonTrivialDestructor; - [FieldOffset(440)] + [FieldOffset(464)] public bool IsExternCContext; - [FieldOffset(448)] + [FieldOffset(472)] public global::System.IntPtr Layout; [SuppressUnmanagedCodeSecurity] @@ -6049,7 +6212,7 @@ namespace CppSharp private static Class.Internal* __CopyValue(Class.Internal native) { - var ret = Marshal.AllocHGlobal(456); + var ret = Marshal.AllocHGlobal(480); CppSharp.Parser.AST.Class.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (Class.Internal*) ret; } @@ -6068,7 +6231,7 @@ namespace CppSharp public Class() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(456); + __Instance = Marshal.AllocHGlobal(480); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6648,7 +6811,7 @@ namespace CppSharp public unsafe partial class ClassTemplateSpecialization : CppSharp.Parser.AST.Class, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 496)] + [StructLayout(LayoutKind.Explicit, Size = 520)] public new partial struct Internal { [FieldOffset(0)] @@ -6681,43 +6844,43 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(432)] + [FieldOffset(456)] public bool IsPOD; - [FieldOffset(433)] + [FieldOffset(457)] public bool IsAbstract; - [FieldOffset(434)] + [FieldOffset(458)] public bool IsUnion; - [FieldOffset(435)] + [FieldOffset(459)] public bool IsDynamic; - [FieldOffset(436)] + [FieldOffset(460)] public bool IsPolymorphic; - [FieldOffset(437)] + [FieldOffset(461)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(438)] + [FieldOffset(462)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(439)] + [FieldOffset(463)] public bool HasNonTrivialDestructor; - [FieldOffset(440)] + [FieldOffset(464)] public bool IsExternCContext; - [FieldOffset(448)] + [FieldOffset(472)] public global::System.IntPtr Layout; - [FieldOffset(456)] + [FieldOffset(480)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(488)] + [FieldOffset(512)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6770,7 +6933,7 @@ namespace CppSharp private static ClassTemplateSpecialization.Internal* __CopyValue(ClassTemplateSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(496); + var ret = Marshal.AllocHGlobal(520); CppSharp.Parser.AST.ClassTemplateSpecialization.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (ClassTemplateSpecialization.Internal*) ret; } @@ -6789,7 +6952,7 @@ namespace CppSharp public ClassTemplateSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(496); + __Instance = Marshal.AllocHGlobal(520); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -6859,7 +7022,7 @@ namespace CppSharp public unsafe partial class ClassTemplatePartialSpecialization : CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 496)] + [StructLayout(LayoutKind.Explicit, Size = 520)] public new partial struct Internal { [FieldOffset(0)] @@ -6892,43 +7055,43 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(432)] + [FieldOffset(456)] public bool IsPOD; - [FieldOffset(433)] + [FieldOffset(457)] public bool IsAbstract; - [FieldOffset(434)] + [FieldOffset(458)] public bool IsUnion; - [FieldOffset(435)] + [FieldOffset(459)] public bool IsDynamic; - [FieldOffset(436)] + [FieldOffset(460)] public bool IsPolymorphic; - [FieldOffset(437)] + [FieldOffset(461)] public bool HasNonTrivialDefaultConstructor; - [FieldOffset(438)] + [FieldOffset(462)] public bool HasNonTrivialCopyConstructor; - [FieldOffset(439)] + [FieldOffset(463)] public bool HasNonTrivialDestructor; - [FieldOffset(440)] + [FieldOffset(464)] public bool IsExternCContext; - [FieldOffset(448)] + [FieldOffset(472)] public global::System.IntPtr Layout; - [FieldOffset(456)] + [FieldOffset(480)] public global::System.IntPtr TemplatedDecl; - [FieldOffset(488)] + [FieldOffset(512)] public CppSharp.Parser.AST.TemplateSpecializationKind SpecializationKind; [SuppressUnmanagedCodeSecurity] @@ -6961,7 +7124,7 @@ namespace CppSharp private static ClassTemplatePartialSpecialization.Internal* __CopyValue(ClassTemplatePartialSpecialization.Internal native) { - var ret = Marshal.AllocHGlobal(496); + var ret = Marshal.AllocHGlobal(520); CppSharp.Parser.AST.ClassTemplatePartialSpecialization.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (ClassTemplatePartialSpecialization.Internal*) ret; } @@ -6980,7 +7143,7 @@ namespace CppSharp public ClassTemplatePartialSpecialization() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(496); + __Instance = Marshal.AllocHGlobal(520); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7317,7 +7480,7 @@ namespace CppSharp public unsafe partial class Namespace : CppSharp.Parser.AST.DeclarationContext, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 336)] + [StructLayout(LayoutKind.Explicit, Size = 360)] public new partial struct Internal { [FieldOffset(0)] @@ -7350,10 +7513,10 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(329)] + [FieldOffset(353)] public bool IsInline; [SuppressUnmanagedCodeSecurity] @@ -7386,7 +7549,7 @@ namespace CppSharp private static Namespace.Internal* __CopyValue(Namespace.Internal native) { - var ret = Marshal.AllocHGlobal(336); + var ret = Marshal.AllocHGlobal(360); CppSharp.Parser.AST.Namespace.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (Namespace.Internal*) ret; } @@ -7405,7 +7568,7 @@ namespace CppSharp public Namespace() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(336); + __Instance = Marshal.AllocHGlobal(360); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } @@ -7824,7 +7987,7 @@ namespace CppSharp public unsafe partial class TranslationUnit : CppSharp.Parser.AST.Namespace, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 376)] + [StructLayout(LayoutKind.Explicit, Size = 400)] public new partial struct Internal { [FieldOffset(0)] @@ -7857,13 +8020,13 @@ namespace CppSharp [FieldOffset(96)] public global::System.IntPtr OriginalPtr; - [FieldOffset(328)] + [FieldOffset(352)] public bool IsAnonymous; - [FieldOffset(329)] + [FieldOffset(353)] public bool IsInline; - [FieldOffset(344)] + [FieldOffset(368)] public bool IsSystemHeader; [SuppressUnmanagedCodeSecurity] @@ -7926,7 +8089,7 @@ namespace CppSharp private static TranslationUnit.Internal* __CopyValue(TranslationUnit.Internal native) { - var ret = Marshal.AllocHGlobal(376); + var ret = Marshal.AllocHGlobal(400); CppSharp.Parser.AST.TranslationUnit.Internal.cctor_1(ret, new global::System.IntPtr(&native)); return (TranslationUnit.Internal*) ret; } @@ -7945,7 +8108,7 @@ namespace CppSharp public TranslationUnit() : this((Internal*) null) { - __Instance = Marshal.AllocHGlobal(376); + __Instance = Marshal.AllocHGlobal(400); __ownsNativeInstance = true; Internal.ctor_0(__Instance); } diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 6c12b487..14ac4468 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -2373,6 +2373,34 @@ Variable* Parser::WalkVariable(clang::VarDecl *VD) //-----------------------------------// +Friend* Parser::WalkFriend(clang::FriendDecl *FD) +{ + using namespace clang; + + auto NS = GetNamespace(FD); + assert(NS && "Expected a valid namespace"); + + auto USR = GetDeclUSR(FD); + if (auto F = NS->FindFriend(USR)) + return F; + + auto F = new Friend(); + HandleDeclaration(FD, F); + F->_Namespace = NS; + + if (auto D = FD->getFriendDecl()) + F->Declaration = WalkDeclarationDef(D); + + //auto TL = FD->getFriendType()->getTypeLoc(); + //F->QualifiedType = GetQualifiedType(VD->getType(), WalkType(FD->getFriendType(), &TL)); + + NS->Friends.push_back(F); + + return F; +} + +//-----------------------------------// + bool Parser::GetDeclText(clang::SourceRange SR, std::string& Text) { using namespace clang; @@ -2906,9 +2934,7 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D, case Decl::Friend: { auto FD = cast(D); - if (auto Friend = FD->getFriendDecl()) - return WalkDeclaration(Friend, IgnoreSystemDecls, CanBeDefinition); - + Decl = WalkFriend(FD); break; } // Ignore these declarations since they must have been declared in diff --git a/src/CppParser/Parser.h b/src/CppParser/Parser.h index 84f6ebd1..39972304 100644 --- a/src/CppParser/Parser.h +++ b/src/CppParser/Parser.h @@ -86,6 +86,7 @@ protected: FunctionTemplate* WalkFunctionTemplate(clang::FunctionTemplateDecl* TD); FunctionTemplateSpecialization* WalkFunctionTemplateSpec(clang::FunctionTemplateSpecializationInfo* FTS, Function* Function); Variable* WalkVariable(clang::VarDecl* VD); + Friend* WalkFriend(clang::FriendDecl* FD); RawComment* WalkRawComment(const clang::RawComment* RC); Type* WalkType(clang::QualType QualType, clang::TypeLoc* TL = 0, bool DesugarType = false); diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index 63ade352..1fe1db92 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -146,6 +146,11 @@ namespace CppSharp.Generator.Tests.AST { throw new System.NotImplementedException(); } + + public bool VisitFriend(Friend friend) + { + throw new System.NotImplementedException(); + } } #endregion diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index 449624af..e8cf6c83 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -404,6 +404,11 @@ namespace CppSharp.Generators.CLI throw new NotImplementedException(); } + public string VisitFriend(Friend friend) + { + throw new NotImplementedException(); + } + public string ToString(Type type) { return type.Visit(this); diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index 94dafe32..b3a85263 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -599,6 +599,11 @@ namespace CppSharp.Generators.CSharp throw new NotImplementedException(); } + public CSharpTypePrinterResult VisitFriend(Friend friend) + { + throw new NotImplementedException(); + } + public CSharpTypePrinterResult VisitParameters(IEnumerable @params, bool hasNames) { diff --git a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs index 829c7714..0322089a 100644 --- a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs +++ b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs @@ -237,6 +237,11 @@ namespace CppSharp.Passes return false; } + public bool VisitFriend(Friend friend) + { + return false; + } + #endregion } diff --git a/src/Generator/Types/CppTypePrinter.cs b/src/Generator/Types/CppTypePrinter.cs index e71c94c5..6e76f44b 100644 --- a/src/Generator/Types/CppTypePrinter.cs +++ b/src/Generator/Types/CppTypePrinter.cs @@ -324,6 +324,11 @@ namespace CppSharp.Types return VisitDeclaration(property); } + public string VisitFriend(Friend friend) + { + throw new NotImplementedException(); + } + public string ToString(Type type) { return type.Visit(this);