diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 6b155419..742fed09 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; +using System.Linq; using CppSharp.AST.Extensions; namespace CppSharp.AST @@ -103,6 +105,7 @@ namespace CppSharp.AST Conversion = method.Conversion; SynthKind = method.SynthKind; AdjustedOffset = method.AdjustedOffset; + OverriddenMethods.AddRange(method.OverriddenMethods); } public Method(Function function) @@ -115,9 +118,13 @@ namespace CppSharp.AST public bool IsStatic { get; set; } public bool IsConst { get; set; } public bool IsExplicit { get; set; } - public bool IsOverride { get; set; } + public bool IsOverride + { + get { return isOverride ?? OverriddenMethods.Any(); } + set { isOverride = value; } + } - // True if the method is final / sealed. + // True if the method is final / sealed. public bool IsFinal { get; set; } public bool IsProxy { get; set; } @@ -161,9 +168,13 @@ namespace CppSharp.AST public int AdjustedOffset { get; set; } + public List OverriddenMethods { get; } = new List(); + public override T Visit(IDeclVisitor visitor) { return visitor.VisitMethodDecl(this); } + + private bool? isOverride; } } \ No newline at end of file diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index f7e6f0b8..ce392433 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -650,7 +650,6 @@ Method::Method() , isStatic(false) , isConst(false) , isExplicit(false) - , isOverride(false) , isDefaultConstructor(false) , isCopyConstructor(false) , isMoveConstructor(false) @@ -661,6 +660,8 @@ Method::Method() Method::~Method() {} +DEF_VECTOR(Method, Method*, OverriddenMethods) + // Enumeration Enumeration::Enumeration() : DeclarationContext(DeclarationKind::Enumeration), diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index 183332fc..3eaef0be 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -762,7 +762,6 @@ public: bool isStatic; bool isConst; bool isExplicit; - bool isOverride; CXXMethodKind methodKind; @@ -772,6 +771,7 @@ public: QualifiedType conversionType; RefQualifierKind refQualifier; + VECTOR(Method*, OverriddenMethods) }; class CS_API Enumeration : public DeclarationContext diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp index 062594ab..c2e20eac 100644 --- a/src/CppParser/Bindings/CLI/AST.cpp +++ b/src/CppParser/Bindings/CLI/AST.cpp @@ -3739,6 +3739,26 @@ CppSharp::Parser::AST::Method::Method() NativePtr = new ::CppSharp::CppParser::AST::Method(); } +CppSharp::Parser::AST::Method^ CppSharp::Parser::AST::Method::GetOverriddenMethods(unsigned int i) +{ + auto __ret = ((::CppSharp::CppParser::AST::Method*)NativePtr)->getOverriddenMethods(i); + if (__ret == nullptr) return nullptr; + return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Method((::CppSharp::CppParser::AST::Method*)__ret); +} + +void CppSharp::Parser::AST::Method::AddOverriddenMethods(CppSharp::Parser::AST::Method^ s) +{ + if (ReferenceEquals(s, nullptr)) + throw gcnew ::System::ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + auto __arg0 = (::CppSharp::CppParser::AST::Method*)s->NativePtr; + ((::CppSharp::CppParser::AST::Method*)NativePtr)->addOverriddenMethods(__arg0); +} + +void CppSharp::Parser::AST::Method::ClearOverriddenMethods() +{ + ((::CppSharp::CppParser::AST::Method*)NativePtr)->clearOverriddenMethods(); +} + CppSharp::Parser::AST::Method::Method(CppSharp::Parser::AST::Method^ _0) : CppSharp::Parser::AST::Function((::CppSharp::CppParser::AST::Function*)nullptr) { @@ -3789,16 +3809,6 @@ void CppSharp::Parser::AST::Method::IsExplicit::set(bool value) ((::CppSharp::CppParser::AST::Method*)NativePtr)->isExplicit = value; } -bool CppSharp::Parser::AST::Method::IsOverride::get() -{ - return ((::CppSharp::CppParser::AST::Method*)NativePtr)->isOverride; -} - -void CppSharp::Parser::AST::Method::IsOverride::set(bool value) -{ - ((::CppSharp::CppParser::AST::Method*)NativePtr)->isOverride = value; -} - CppSharp::Parser::AST::CXXMethodKind CppSharp::Parser::AST::Method::MethodKind::get() { return (CppSharp::Parser::AST::CXXMethodKind)((::CppSharp::CppParser::AST::Method*)NativePtr)->methodKind; @@ -3859,6 +3869,34 @@ void CppSharp::Parser::AST::Method::RefQualifier::set(CppSharp::Parser::AST::Ref ((::CppSharp::CppParser::AST::Method*)NativePtr)->refQualifier = (::CppSharp::CppParser::AST::RefQualifierKind)value; } +System::Collections::Generic::List^ CppSharp::Parser::AST::Method::OverriddenMethods::get() +{ + auto _tmp__OverriddenMethods = gcnew System::Collections::Generic::List(); + for(auto _element : ((::CppSharp::CppParser::AST::Method*)NativePtr)->OverriddenMethods) + { + auto _marshalElement = (_element == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Method((::CppSharp::CppParser::AST::Method*)_element); + _tmp__OverriddenMethods->Add(_marshalElement); + } + return _tmp__OverriddenMethods; +} + +void CppSharp::Parser::AST::Method::OverriddenMethods::set(System::Collections::Generic::List^ value) +{ + auto _tmpvalue = std::vector<::CppSharp::CppParser::AST::Method*>(); + for each(CppSharp::Parser::AST::Method^ _element in value) + { + auto _marshalElement = (::CppSharp::CppParser::AST::Method*)_element->NativePtr; + _tmpvalue.push_back(_marshalElement); + } + ((::CppSharp::CppParser::AST::Method*)NativePtr)->OverriddenMethods = _tmpvalue; +} + +unsigned int CppSharp::Parser::AST::Method::OverriddenMethodsCount::get() +{ + auto __ret = ((::CppSharp::CppParser::AST::Method*)NativePtr)->getOverriddenMethodsCount(); + return __ret; +} + CppSharp::Parser::AST::Enumeration::Item::Item(::CppSharp::CppParser::AST::Enumeration::Item* native) : CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native) { diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h index 8e977d74..ed1a2131 100644 --- a/src/CppParser/Bindings/CLI/AST.h +++ b/src/CppParser/Bindings/CLI/AST.h @@ -2180,12 +2180,6 @@ namespace CppSharp void set(bool); } - property bool IsOverride - { - bool get(); - void set(bool); - } - property CppSharp::Parser::AST::CXXMethodKind MethodKind { CppSharp::Parser::AST::CXXMethodKind get(); @@ -2221,6 +2215,23 @@ namespace CppSharp CppSharp::Parser::AST::RefQualifierKind get(); void set(CppSharp::Parser::AST::RefQualifierKind); } + + property System::Collections::Generic::List^ OverriddenMethods + { + System::Collections::Generic::List^ get(); + void set(System::Collections::Generic::List^); + } + + property unsigned int OverriddenMethodsCount + { + unsigned int get(); + } + + CppSharp::Parser::AST::Method^ GetOverriddenMethods(unsigned int i); + + void AddOverriddenMethods(CppSharp::Parser::AST::Method^ s); + + void ClearOverriddenMethods(); }; public ref class Enumeration : CppSharp::Parser::AST::DeclarationContext diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs index 2037941e..238614ec 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -7583,7 +7583,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 352)] + [StructLayout(LayoutKind.Explicit, Size = 360)] public new partial struct __Internal { [FieldOffset(0)] @@ -7743,26 +7743,26 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(328)] - internal byte isOverride; - - [FieldOffset(332)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(336)] + [FieldOffset(332)] internal byte isDefaultConstructor; - [FieldOffset(337)] + [FieldOffset(333)] internal byte isCopyConstructor; - [FieldOffset(338)] + [FieldOffset(334)] internal byte isMoveConstructor; - [FieldOffset(340)] + [FieldOffset(336)] internal global::CppSharp.Parser.AST.QualifiedType.__Internal conversionType; - [FieldOffset(348)] + [FieldOffset(344)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(348)] + internal global::Std.__1.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodC2Ev")] @@ -7777,6 +7777,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodD2Ev")] internal static extern void dtor(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20getOverriddenMethodsEj")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20addOverriddenMethodsERPS2_")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method22clearOverriddenMethodsEv")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method25getOverriddenMethodsCountEv")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7846,6 +7866,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7898,19 +7942,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7988,6 +8019,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index 9959dcc3..42ee7948 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs @@ -7583,7 +7583,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 420)] + [StructLayout(LayoutKind.Explicit, Size = 428)] public new partial struct __Internal { [FieldOffset(0)] @@ -7743,26 +7743,26 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(396)] - internal byte isOverride; - - [FieldOffset(400)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(404)] + [FieldOffset(400)] internal byte isDefaultConstructor; - [FieldOffset(405)] + [FieldOffset(401)] internal byte isCopyConstructor; - [FieldOffset(406)] + [FieldOffset(402)] internal byte isMoveConstructor; - [FieldOffset(408)] + [FieldOffset(404)] internal global::CppSharp.Parser.AST.QualifiedType.__Internal conversionType; - [FieldOffset(416)] + [FieldOffset(412)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(416)] + internal global::Std.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="??0Method@AST@CppParser@CppSharp@@QAE@XZ")] @@ -7777,6 +7777,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="??1Method@AST@CppParser@CppSharp@@QAE@XZ")] internal static extern void dtor(global::System.IntPtr instance, int delete); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?getOverriddenMethods@Method@AST@CppParser@CppSharp@@QAEPAV1234@I@Z")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?addOverriddenMethods@Method@AST@CppParser@CppSharp@@QAEXAAPAV1234@@Z")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?clearOverriddenMethods@Method@AST@CppParser@CppSharp@@QAEXXZ")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, + EntryPoint="?getOverriddenMethodsCount@Method@AST@CppParser@CppSharp@@QAEIXZ")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7846,6 +7866,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7898,19 +7942,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7988,6 +8019,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index 0f94d4ff..6ade0c52 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -7582,7 +7582,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 656)] + [StructLayout(LayoutKind.Explicit, Size = 680)] public new partial struct __Internal { [FieldOffset(0)] @@ -7742,18 +7742,15 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(620)] - internal byte isOverride; - - [FieldOffset(624)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(628)] + [FieldOffset(624)] internal byte isDefaultConstructor; - [FieldOffset(629)] + [FieldOffset(625)] internal byte isCopyConstructor; - [FieldOffset(630)] + [FieldOffset(626)] internal byte isMoveConstructor; [FieldOffset(632)] @@ -7762,6 +7759,9 @@ namespace CppSharp [FieldOffset(648)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(656)] + internal global::Std.__1.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodC2Ev")] @@ -7776,6 +7776,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodD2Ev")] internal static extern void dtor(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20getOverriddenMethodsEj")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20addOverriddenMethodsERPS2_")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method22clearOverriddenMethodsEv")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method25getOverriddenMethodsCountEv")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7845,6 +7865,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7897,19 +7941,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7987,6 +8018,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs index 611cc931..db3c0bd2 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs @@ -7582,7 +7582,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 728)] + [StructLayout(LayoutKind.Explicit, Size = 752)] public new partial struct __Internal { [FieldOffset(0)] @@ -7742,18 +7742,15 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(692)] - internal byte isOverride; - - [FieldOffset(696)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(700)] + [FieldOffset(696)] internal byte isDefaultConstructor; - [FieldOffset(701)] + [FieldOffset(697)] internal byte isCopyConstructor; - [FieldOffset(702)] + [FieldOffset(698)] internal byte isMoveConstructor; [FieldOffset(704)] @@ -7762,6 +7759,9 @@ namespace CppSharp [FieldOffset(720)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(728)] + internal global::Std.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodC2Ev")] @@ -7776,6 +7776,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodD2Ev")] internal static extern void dtor(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20getOverriddenMethodsEj")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20addOverriddenMethodsERPS2_")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method22clearOverriddenMethodsEv")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method25getOverriddenMethodsCountEv")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7845,6 +7865,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7897,19 +7941,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7987,6 +8018,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs index 017f4933..faffa70d 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs @@ -7582,7 +7582,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 584)] + [StructLayout(LayoutKind.Explicit, Size = 608)] public new partial struct __Internal { [FieldOffset(0)] @@ -7742,18 +7742,15 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(548)] - internal byte isOverride; - - [FieldOffset(552)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(556)] + [FieldOffset(552)] internal byte isDefaultConstructor; - [FieldOffset(557)] + [FieldOffset(553)] internal byte isCopyConstructor; - [FieldOffset(558)] + [FieldOffset(554)] internal byte isMoveConstructor; [FieldOffset(560)] @@ -7762,6 +7759,9 @@ namespace CppSharp [FieldOffset(576)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(584)] + internal global::Std.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodC2Ev")] @@ -7776,6 +7776,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST6MethodD2Ev")] internal static extern void dtor(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20getOverriddenMethodsEj")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method20addOverriddenMethodsERPS2_")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method22clearOverriddenMethodsEv")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="_ZN8CppSharp9CppParser3AST6Method25getOverriddenMethodsCountEv")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7845,6 +7865,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7897,19 +7941,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7987,6 +8018,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index c42b8810..5c237a4f 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs @@ -7583,7 +7583,7 @@ namespace CppSharp public unsafe partial class Method : global::CppSharp.Parser.AST.Function, IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 696)] + [StructLayout(LayoutKind.Explicit, Size = 720)] public new partial struct __Internal { [FieldOffset(0)] @@ -7743,18 +7743,15 @@ namespace CppSharp internal byte isExplicit; [FieldOffset(660)] - internal byte isOverride; - - [FieldOffset(664)] internal global::CppSharp.Parser.AST.CXXMethodKind methodKind; - [FieldOffset(668)] + [FieldOffset(664)] internal byte isDefaultConstructor; - [FieldOffset(669)] + [FieldOffset(665)] internal byte isCopyConstructor; - [FieldOffset(670)] + [FieldOffset(666)] internal byte isMoveConstructor; [FieldOffset(672)] @@ -7763,6 +7760,9 @@ namespace CppSharp [FieldOffset(688)] internal global::CppSharp.Parser.AST.RefQualifierKind refQualifier; + [FieldOffset(696)] + internal global::Std.Vector.__Internal OverriddenMethods; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="??0Method@AST@CppParser@CppSharp@@QEAA@XZ")] @@ -7777,6 +7777,26 @@ namespace CppSharp [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="??1Method@AST@CppParser@CppSharp@@QEAA@XZ")] internal static extern void dtor(global::System.IntPtr instance, int delete); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="?getOverriddenMethods@Method@AST@CppParser@CppSharp@@QEAAPEAV1234@I@Z")] + internal static extern global::System.IntPtr GetOverriddenMethods(global::System.IntPtr instance, uint i); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="?addOverriddenMethods@Method@AST@CppParser@CppSharp@@QEAAXAEAPEAV1234@@Z")] + internal static extern void AddOverriddenMethods(global::System.IntPtr instance, global::System.IntPtr s); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="?clearOverriddenMethods@Method@AST@CppParser@CppSharp@@QEAAXXZ")] + internal static extern void ClearOverriddenMethods(global::System.IntPtr instance); + + [SuppressUnmanagedCodeSecurity] + [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, + EntryPoint="?getOverriddenMethodsCount@Method@AST@CppParser@CppSharp@@QEAAIXZ")] + internal static extern uint GetOverriddenMethodsCount(global::System.IntPtr instance); } internal static new global::CppSharp.Parser.AST.Method __CreateInstance(global::System.IntPtr native, bool skipVTables = false) @@ -7846,6 +7866,30 @@ namespace CppSharp __Instance = IntPtr.Zero; } + public global::CppSharp.Parser.AST.Method GetOverriddenMethods(uint i) + { + var __ret = __Internal.GetOverriddenMethods((__Instance + __PointerAdjustment), i); + global::CppSharp.Parser.AST.Method __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (global::CppSharp.Parser.AST.Method.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (global::CppSharp.Parser.AST.Method) global::CppSharp.Parser.AST.Method.NativeToManagedMap[__ret]; + else __result0 = global::CppSharp.Parser.AST.Method.__CreateInstance(__ret); + return __result0; + } + + public void AddOverriddenMethods(global::CppSharp.Parser.AST.Method s) + { + if (ReferenceEquals(s, null)) + throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&)."); + var __arg0 = s.__Instance; + __Internal.AddOverriddenMethods((__Instance + __PointerAdjustment), __arg0); + } + + public void ClearOverriddenMethods() + { + __Internal.ClearOverriddenMethods((__Instance + __PointerAdjustment)); + } + public bool IsVirtual { get @@ -7898,19 +7942,6 @@ namespace CppSharp } } - public bool IsOverride - { - get - { - return ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride != 0; - } - - set - { - ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->isOverride = (byte) (value ? 1 : 0); - } - } - public global::CppSharp.Parser.AST.CXXMethodKind MethodKind { get @@ -7988,6 +8019,15 @@ namespace CppSharp ((global::CppSharp.Parser.AST.Method.__Internal*) __Instance)->refQualifier = value; } } + + public uint OverriddenMethodsCount + { + get + { + var __ret = __Internal.GetOverriddenMethodsCount((__Instance + __PointerAdjustment)); + return __ret; + } + } } public unsafe partial class Enumeration : global::CppSharp.Parser.AST.DeclarationContext, IDisposable diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index d2a50e35..ec2a1cff 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1603,7 +1603,11 @@ Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD) Method->isStatic = MD->isStatic(); Method->isVirtual = MD->isVirtual(); Method->isConst = MD->isConst(); - Method->isOverride = MD->size_overridden_methods() > 0; + for (auto OverriddenMethod : MD->overridden_methods()) + { + auto OM = WalkMethodCXX(OverriddenMethod); + Method->OverriddenMethods.push_back(OM); + } switch (MD->getRefQualifier()) { case clang::RefQualifierKind::RQ_None: diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index 1758b7e4..fa443c5a 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -1209,7 +1209,6 @@ namespace CppSharp _method.IsConst = decl.IsConst; _method.IsImplicit = decl.IsImplicit; _method.IsExplicit = decl.IsExplicit; - _method.IsOverride = decl.IsOverride; switch (decl.RefQualifier) { @@ -1232,6 +1231,12 @@ namespace CppSharp _method.ConversionType = typeConverter.VisitQualified(decl.ConversionType); + for (uint i = 0; i < decl.OverriddenMethodsCount; i++) + { + var @override = decl.GetOverriddenMethods(i); + _method.OverriddenMethods.Add((AST.Method) Visit(@override)); + } + return _method; }