Browse Source

Fixed a possible memory leak with default arguments assigned by a constructor.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/600/head
Dimitar Dobrev 10 years ago
parent
commit
9645fa24a5
  1. 11
      src/CppParser/Parser.cpp

11
src/CppParser/Parser.cpp

@ -2666,8 +2666,6 @@ AST::Expression* Parser::WalkExpression(clang::Expr* Expr)
case Stmt::CXXTemporaryObjectExprClass: case Stmt::CXXTemporaryObjectExprClass:
{ {
auto ConstructorExpr = cast<clang::CXXConstructExpr>(Expr); auto ConstructorExpr = cast<clang::CXXConstructExpr>(Expr);
auto ConstructorExpression = new AST::CXXConstructExpr(GetStringFromStatement(Expr),
WalkDeclaration(ConstructorExpr->getConstructor()));
if (ConstructorExpr->getNumArgs() == 1) if (ConstructorExpr->getNumArgs() == 1)
{ {
auto Arg = ConstructorExpr->getArg(0); auto Arg = ConstructorExpr->getArg(0);
@ -2680,12 +2678,11 @@ AST::Expression* Parser::WalkExpression(clang::Expr* Expr)
return WalkExpression(SubTemporaryExpr); return WalkExpression(SubTemporaryExpr);
} }
} }
else auto ConstructorExpression = new AST::CXXConstructExpr(GetStringFromStatement(Expr),
WalkDeclaration(ConstructorExpr->getConstructor()));
for (clang::Expr* arg : ConstructorExpr->arguments())
{ {
for (clang::Expr* arg : ConstructorExpr->arguments()) ConstructorExpression->Arguments.push_back(WalkExpression(arg));
{
ConstructorExpression->Arguments.push_back(WalkExpression(arg));
}
} }
return ConstructorExpression; return ConstructorExpression;
} }

Loading…
Cancel
Save