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. 7
      src/CppParser/Parser.cpp

7
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,13 +2678,12 @@ 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;
} }
case Stmt::CXXBindTemporaryExprClass: case Stmt::CXXBindTemporaryExprClass:

Loading…
Cancel
Save