diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index f2650b3d..54ebd48c 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -557,7 +557,7 @@ Method::Method() Enumeration::Enumeration() : DeclarationContext(DeclarationKind::Enumeration), Modifiers((EnumModifiers)0), Type(0), BuiltinType(0) {} -DEF_VECTOR(Enumeration, Enumeration::Item, Items) +DEF_VECTOR(Enumeration, Enumeration::Item*, Items) Enumeration::Item::Item() : Declaration(DeclarationKind::EnumerationItem) {} @@ -569,9 +569,9 @@ DEF_STRING(Enumeration::Item, Expression) Enumeration::Item* Enumeration::FindItemByName(const std::string& Name) { auto foundEnumItem = std::find_if(Items.begin(), Items.end(), - [&](Item _item) { return _item.Name == Name; }); + [&](Item* _item) { return _item->Name == Name; }); if (foundEnumItem != Items.end()) - return &*foundEnumItem; + return *foundEnumItem; return nullptr; } diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index f18180b8..49c4d2d4 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -675,7 +675,7 @@ public: EnumModifiers Modifiers; CppSharp::CppParser::AST::Type* Type; CppSharp::CppParser::AST::BuiltinType* BuiltinType; - VECTOR(Item, Items) + VECTOR(Item*, Items) Item* FindItemByName(const std::string& Name); }; diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp index 0fcda136..1cf38349 100644 --- a/src/CppParser/Bindings/CLI/AST.cpp +++ b/src/CppParser/Bindings/CLI/AST.cpp @@ -2790,15 +2790,15 @@ CppSharp::Parser::AST::Enumeration::Enumeration() CppSharp::Parser::AST::Enumeration::Item^ CppSharp::Parser::AST::Enumeration::getItems(unsigned int i) { auto __ret = ((::CppSharp::CppParser::AST::Enumeration*)NativePtr)->getItems(i); - auto ____ret = new ::CppSharp::CppParser::AST::Enumeration::Item(__ret); - return (____ret == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Enumeration::Item((::CppSharp::CppParser::AST::Enumeration::Item*)____ret); + if (__ret == nullptr) return nullptr; + return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::Enumeration::Item((::CppSharp::CppParser::AST::Enumeration::Item*)__ret); } void CppSharp::Parser::AST::Enumeration::addItems(CppSharp::Parser::AST::Enumeration::Item^ s) { if (ReferenceEquals(s, nullptr)) throw gcnew ::System::ArgumentNullException("s", "s cannot be null because it is a C++ reference (&)."); - auto &arg0 = *(::CppSharp::CppParser::AST::Enumeration::Item*)s->NativePtr; + auto arg0 = (::CppSharp::CppParser::AST::Enumeration::Item*)s->NativePtr; ((::CppSharp::CppParser::AST::Enumeration*)NativePtr)->addItems(arg0); } 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 45602e9f..da00086d 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 @@ -6179,11 +6179,11 @@ namespace CppSharp [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8getItemsEj")] - internal static extern void getItems_0(global::System.IntPtr @return, global::System.IntPtr instance, uint i); + internal static extern global::System.IntPtr getItems_0(global::System.IntPtr instance, uint i); [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, - EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERNS2_4ItemE")] + EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERPNS2_4ItemE")] internal static extern void addItems_0(global::System.IntPtr instance, global::System.IntPtr s); [SuppressUnmanagedCodeSecurity] @@ -6415,9 +6415,13 @@ namespace CppSharp public CppSharp.Parser.AST.Enumeration.Item getItems(uint i) { - var __ret = new CppSharp.Parser.AST.Enumeration.Item.Internal(); - Internal.getItems_0(new IntPtr(&__ret), (__Instance + __PointerAdjustment), i); - return CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + var __ret = Internal.getItems_0((__Instance + __PointerAdjustment), i); + CppSharp.Parser.AST.Enumeration.Item __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (CppSharp.Parser.AST.Enumeration.Item) CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap[__ret]; + else __result0 = CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + return __result0; } public void addItems(CppSharp.Parser.AST.Enumeration.Item s) 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 881c9d56..04f7eacc 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs @@ -6178,12 +6178,12 @@ namespace CppSharp [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, - EntryPoint="?getItems@Enumeration@AST@CppParser@CppSharp@@QAE?AVItem@1234@I@Z")] - internal static extern void getItems_0(global::System.IntPtr instance, global::System.IntPtr @return, uint i); + EntryPoint="?getItems@Enumeration@AST@CppParser@CppSharp@@QAEPAVItem@1234@I@Z")] + internal static extern global::System.IntPtr getItems_0(global::System.IntPtr instance, uint i); [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, - EntryPoint="?addItems@Enumeration@AST@CppParser@CppSharp@@QAEXAAVItem@1234@@Z")] + EntryPoint="?addItems@Enumeration@AST@CppParser@CppSharp@@QAEXAAPAVItem@1234@@Z")] internal static extern void addItems_0(global::System.IntPtr instance, global::System.IntPtr s); [SuppressUnmanagedCodeSecurity] @@ -6415,9 +6415,13 @@ namespace CppSharp public CppSharp.Parser.AST.Enumeration.Item getItems(uint i) { - var __ret = new CppSharp.Parser.AST.Enumeration.Item.Internal(); - Internal.getItems_0((__Instance + __PointerAdjustment), new IntPtr(&__ret), i); - return CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + var __ret = Internal.getItems_0((__Instance + __PointerAdjustment), i); + CppSharp.Parser.AST.Enumeration.Item __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (CppSharp.Parser.AST.Enumeration.Item) CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap[__ret]; + else __result0 = CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + return __result0; } public void addItems(CppSharp.Parser.AST.Enumeration.Item s) diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs index f9f6945b..96272a69 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs @@ -6178,11 +6178,11 @@ namespace CppSharp [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8getItemsEj")] - internal static extern void getItems_0(global::System.IntPtr @return, global::System.IntPtr instance, uint i); + internal static extern global::System.IntPtr getItems_0(global::System.IntPtr instance, uint i); [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, - EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERNS2_4ItemE")] + EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERPNS2_4ItemE")] internal static extern void addItems_0(global::System.IntPtr instance, global::System.IntPtr s); [SuppressUnmanagedCodeSecurity] @@ -6414,9 +6414,13 @@ namespace CppSharp public CppSharp.Parser.AST.Enumeration.Item getItems(uint i) { - var __ret = new CppSharp.Parser.AST.Enumeration.Item.Internal(); - Internal.getItems_0(new IntPtr(&__ret), (__Instance + __PointerAdjustment), i); - return CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + var __ret = Internal.getItems_0((__Instance + __PointerAdjustment), i); + CppSharp.Parser.AST.Enumeration.Item __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (CppSharp.Parser.AST.Enumeration.Item) CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap[__ret]; + else __result0 = CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + return __result0; } public void addItems(CppSharp.Parser.AST.Enumeration.Item s) 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 91945b0a..082caefa 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs @@ -6178,11 +6178,11 @@ namespace CppSharp [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8getItemsEj")] - internal static extern void getItems_0(global::System.IntPtr @return, global::System.IntPtr instance, uint i); + internal static extern global::System.IntPtr getItems_0(global::System.IntPtr instance, uint i); [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, - EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERNS2_4ItemE")] + EntryPoint="_ZN8CppSharp9CppParser3AST11Enumeration8addItemsERPNS2_4ItemE")] internal static extern void addItems_0(global::System.IntPtr instance, global::System.IntPtr s); [SuppressUnmanagedCodeSecurity] @@ -6414,9 +6414,13 @@ namespace CppSharp public CppSharp.Parser.AST.Enumeration.Item getItems(uint i) { - var __ret = new CppSharp.Parser.AST.Enumeration.Item.Internal(); - Internal.getItems_0(new IntPtr(&__ret), (__Instance + __PointerAdjustment), i); - return CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + var __ret = Internal.getItems_0((__Instance + __PointerAdjustment), i); + CppSharp.Parser.AST.Enumeration.Item __result0; + if (__ret == IntPtr.Zero) __result0 = null; + else if (CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap.ContainsKey(__ret)) + __result0 = (CppSharp.Parser.AST.Enumeration.Item) CppSharp.Parser.AST.Enumeration.Item.NativeToManagedMap[__ret]; + else __result0 = CppSharp.Parser.AST.Enumeration.Item.__CreateInstance(__ret); + return __result0; } public void addItems(CppSharp.Parser.AST.Enumeration.Item s) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index a4b2c822..fcc0e332 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -2130,7 +2130,7 @@ Enumeration* Parser::WalkEnum(clang::EnumDecl* ED) E->IsIncomplete = false; for(auto it = ED->enumerator_begin(); it != ED->enumerator_end(); ++it) { - E->Items.push_back(*WalkEnumItem(*it)); + E->Items.push_back(WalkEnumItem(*it)); } return E; @@ -2921,7 +2921,9 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D, case Decl::EnumConstant: { auto ED = cast(D); - Decl = WalkEnumItem(ED); + auto E = cast(GetNamespace(ED)); + assert(E && "Expected a valid enumeration"); + Decl = E->FindItemByName(ED->getNameAsString()); break; } case Decl::Function: