summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseInit.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2008-12-09 13:15:23 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2008-12-09 13:15:23 +0000
commit17f2c7d2514aa1b45c0ff25e777a72f59018788b (patch)
tree98505df512a34e442d66d23b1a606cebbcfbb129 /clang/lib/Parse/ParseInit.cpp
parent08628db9d2183b29a6d7a757523e18313f4cf135 (diff)
downloadbcm5719-llvm-17f2c7d2514aa1b45c0ff25e777a72f59018788b.tar.gz
bcm5719-llvm-17f2c7d2514aa1b45c0ff25e777a72f59018788b.zip
Consistently use smart pointers for stmt and expr nodes in parser local variables.
llvm-svn: 60761
Diffstat (limited to 'clang/lib/Parse/ParseInit.cpp')
-rw-r--r--clang/lib/Parse/ParseInit.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/clang/lib/Parse/ParseInit.cpp b/clang/lib/Parse/ParseInit.cpp
index 61c9b9c286d..425377679ce 100644
--- a/clang/lib/Parse/ParseInit.cpp
+++ b/clang/lib/Parse/ParseInit.cpp
@@ -143,10 +143,10 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
// Note that we parse this as an assignment expression, not a constant
// expression (allowing *=, =, etc) to handle the objc case. Sema needs
// to validate that the expression is a constant.
- ExprResult Idx = ParseAssignmentExpression();
- if (Idx.isInvalid) {
+ ExprOwner Idx(Actions, ParseAssignmentExpression());
+ if (Idx.isInvalid()) {
SkipUntil(tok::r_square);
- return Idx;
+ return Idx.move();
}
// Given an expression, we could either have a designator (if the next
@@ -170,7 +170,7 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
return ParseAssignmentExprWithObjCMessageExprStart(StartLoc,
SourceLocation(),
- 0, Idx.Val);
+ 0, Idx.move());
}
// Create designation if we haven't already.
@@ -179,21 +179,20 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
// If this is a normal array designator, remember it.
if (Tok.isNot(tok::ellipsis)) {
- Desig->AddDesignator(Designator::getArray(Idx.Val));
+ Desig->AddDesignator(Designator::getArray(Idx.move()));
} else {
// Handle the gnu array range extension.
Diag(Tok, diag::ext_gnu_array_range);
ConsumeToken();
- ExprResult RHS = ParseConstantExpression();
- if (RHS.isInvalid) {
- Actions.DeleteExpr(Idx.Val);
+ ExprOwner RHS(Actions, ParseConstantExpression());
+ if (RHS.isInvalid()) {
SkipUntil(tok::r_square);
- return RHS;
+ return RHS.move();
}
- Desig->AddDesignator(Designator::getArrayRange(Idx.Val, RHS.Val));
+ Desig->AddDesignator(Designator::getArrayRange(Idx.move(), RHS.move()));
}
-
+
MatchRHSPunctuation(tok::r_square, StartLoc);
}
@@ -264,7 +263,7 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
// If we know that this cannot be a designation, just parse the nested
// initializer directly.
- ExprResult SubElt;
+ ExprOwner SubElt(Actions);
if (!MayBeDesignationStart(Tok.getKind(), PP))
SubElt = ParseInitializer();
else {
@@ -275,13 +274,13 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
// designator, make sure to remove the designator from
// InitExprDesignations, otherwise we'll end up with a designator with no
// making initializer.
- if (SubElt.isInvalid)
+ if (SubElt.isInvalid())
InitExprDesignations.EraseDesignation(InitExprs.size());
}
// If we couldn't parse the subelement, bail out.
- if (!SubElt.isInvalid) {
- InitExprs.push_back(SubElt.Val);
+ if (!SubElt.isInvalid()) {
+ InitExprs.push_back(SubElt.move());
} else {
InitExprsOk = false;
@@ -298,7 +297,7 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
break;
}
}
-
+
// If we don't have a comma continued list, we're done.
if (Tok.isNot(tok::comma)) break;
OpenPOWER on IntegriCloud