diff options
| author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-11-25 22:21:31 +0000 |
|---|---|---|
| committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-11-25 22:21:31 +0000 |
| commit | 511ed555245c79149ebe61a3a6f20d0350c7f9ad (patch) | |
| tree | 55b8d1566dcd398ab0447419ba7fa21331fcb3e6 /clang/lib/Parse/ParseExprCXX.cpp | |
| parent | 474003763f1f54d37e875eb5ca2eb828bad32b98 (diff) | |
| download | bcm5719-llvm-511ed555245c79149ebe61a3a6f20d0350c7f9ad.tar.gz bcm5719-llvm-511ed555245c79149ebe61a3a6f20d0350c7f9ad.zip | |
Use RAII objects to ensure proper destruction of expression and statement AST nodes in the parser in most cases, even on error.
llvm-svn: 60057
Diffstat (limited to 'clang/lib/Parse/ParseExprCXX.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseExprCXX.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 527aba20208..b4b6fb53302 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -14,6 +14,7 @@ #include "clang/Basic/Diagnostic.h" #include "clang/Parse/Parser.h" #include "clang/Parse/DeclSpec.h" +#include "AstGuard.h" using namespace clang; /// ParseCXXScopeSpecifier - Parse global scope or nested-name-specifier. @@ -328,7 +329,7 @@ Parser::ExprResult Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) { assert(Tok.is(tok::l_paren) && "Expected '('!"); SourceLocation LParenLoc = ConsumeParen(); - ExprListTy Exprs; + ExprVector Exprs(Actions); CommaLocsTy CommaLocs; if (Tok.isNot(tok::r_paren)) { @@ -345,7 +346,7 @@ Parser::ExprResult Parser::ParseCXXTypeConstructExpression(const DeclSpec &DS) { "Unexpected number of commas!"); return Actions.ActOnCXXTypeConstructExpr(DS.getSourceRange(), TypeRep, LParenLoc, - &Exprs[0], Exprs.size(), + Exprs.take(), Exprs.size(), &CommaLocs[0], RParenLoc); } @@ -659,7 +660,7 @@ Parser::ExprResult Parser::ParseCXXNewExpression() // A '(' now can be a new-placement or the '(' wrapping the type-id in the // second form of new-expression. It can't be a new-type-id. - ExprListTy PlacementArgs; + ExprVector PlacementArgs(Actions); SourceLocation PlacementLParen, PlacementRParen; TypeTy *Ty = 0; @@ -706,7 +707,7 @@ Parser::ExprResult Parser::ParseCXXNewExpression() ParenTypeId = false; } - ExprListTy ConstructorArgs; + ExprVector ConstructorArgs(Actions); SourceLocation ConstructorLParen, ConstructorRParen; if (Tok.is(tok::l_paren)) { @@ -722,9 +723,9 @@ Parser::ExprResult Parser::ParseCXXNewExpression() } return Actions.ActOnCXXNew(Start, UseGlobal, PlacementLParen, - &PlacementArgs[0], PlacementArgs.size(), + PlacementArgs.take(), PlacementArgs.size(), PlacementRParen, ParenTypeId, TyStart, Ty, TyEnd, - ConstructorLParen, &ConstructorArgs[0], + ConstructorLParen, ConstructorArgs.take(), ConstructorArgs.size(), ConstructorRParen); } |

