Browse Source

Eliminated memory leaks with forward declarations.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/600/head
Dimitar Dobrev 10 years ago
parent
commit
c0767bcd47
  1. 2
      src/Core/Parser/ASTConverter.cs
  2. 13
      src/CppParser/AST.cpp
  3. 2
      src/CppParser/Parser.cpp

2
src/Core/Parser/ASTConverter.cs

@ -789,6 +789,8 @@ namespace CppSharp @@ -789,6 +789,8 @@ namespace CppSharp
_decl.IsIncomplete = decl.IsIncomplete;
_decl.IsDependent = decl.IsDependent;
_decl.DefinitionOrder = decl.DefinitionOrder;
if (decl.CompleteDeclaration != null)
_decl.CompleteDeclaration = Visit(decl.CompleteDeclaration);
if (decl.Comment != null)
_decl.Comment = VisitRawComment(decl.Comment);

13
src/CppParser/AST.cpp

@ -321,10 +321,17 @@ Class* DeclarationContext::FindClass(const std::string& Name, bool IsComplete, @@ -321,10 +321,17 @@ Class* DeclarationContext::FindClass(const std::string& Name, bool IsComplete,
// Replace the incomplete declaration with the complete one.
if (_class->IsIncomplete)
{
_class->CompleteDeclaration = newClass;
bool Found = false;
std::replace_if(Classes.begin(), Classes.end(),
[&](Class* klass) { return klass == _class; }, newClass);
[&](Class* klass)
{
Found |= (klass == _class);
return klass == _class;
}, newClass);
if (Found)
delete _class;
else
_class->CompleteDeclaration = newClass;
}
return newClass;

2
src/CppParser/Parser.cpp

@ -663,7 +663,7 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process) @@ -663,7 +663,7 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process)
Process = true;
return RC;
}
}
Class* Parser::WalkRecord(clang::RecordDecl* Record)
{

Loading…
Cancel
Save