Browse Source

Fixed the memory leaks when parsing enumerations.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/600/head
Dimitar Dobrev 10 years ago
parent
commit
088530dacf
  1. 6
      src/CppParser/AST.cpp
  2. 2
      src/CppParser/AST.h
  3. 6
      src/CppParser/Bindings/CLI/AST.cpp
  4. 14
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
  5. 16
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
  6. 14
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs
  7. 14
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
  8. 6
      src/CppParser/Parser.cpp

6
src/CppParser/AST.cpp

@ -557,7 +557,7 @@ Method::Method() @@ -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) @@ -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;
}

2
src/CppParser/AST.h

@ -675,7 +675,7 @@ public: @@ -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);
};

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

@ -2790,15 +2790,15 @@ CppSharp::Parser::AST::Enumeration::Enumeration() @@ -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);
}

14
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs

@ -6179,11 +6179,11 @@ namespace CppSharp @@ -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 @@ -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)

16
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs

@ -6178,12 +6178,12 @@ namespace CppSharp @@ -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 @@ -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)

14
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/AST.cs

@ -6178,11 +6178,11 @@ namespace CppSharp @@ -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 @@ -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)

14
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs

@ -6178,11 +6178,11 @@ namespace CppSharp @@ -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 @@ -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)

6
src/CppParser/Parser.cpp

@ -2130,7 +2130,7 @@ Enumeration* Parser::WalkEnum(clang::EnumDecl* ED) @@ -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, @@ -2921,7 +2921,9 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D,
case Decl::EnumConstant:
{
auto ED = cast<EnumConstantDecl>(D);
Decl = WalkEnumItem(ED);
auto E = cast<Enumeration>(GetNamespace(ED));
assert(E && "Expected a valid enumeration");
Decl = E->FindItemByName(ED->getNameAsString());
break;
}
case Decl::Function:

Loading…
Cancel
Save