[cfe-commits] r60900 - in /cfe/trunk: include/clang/Parse/Ownership.h include/clang/Parse/Parser.h lib/Parse/ParseDecl.cpp lib/Parse/ParseExpr.cpp lib/Parse/ParseExprCXX.cpp lib/Parse/ParseInit.cpp lib/Parse/ParseObjc.cpp lib/Parse/ParseStmt.cpp

Sebastian Redl sebastian.redl at getdesigned.at
Thu Dec 11 13:37:09 PST 2008


Author: cornedbee
Date: Thu Dec 11 15:36:32 2008
New Revision: 60900

URL: http://llvm.org/viewvc/llvm-project?rev=60900&view=rev
Log:
Convert selected expression parsers to use smart pointers.

Modified:
    cfe/trunk/include/clang/Parse/Ownership.h
    cfe/trunk/include/clang/Parse/Parser.h
    cfe/trunk/lib/Parse/ParseDecl.cpp
    cfe/trunk/lib/Parse/ParseExpr.cpp
    cfe/trunk/lib/Parse/ParseExprCXX.cpp
    cfe/trunk/lib/Parse/ParseInit.cpp
    cfe/trunk/lib/Parse/ParseObjc.cpp
    cfe/trunk/lib/Parse/ParseStmt.cpp

Modified: cfe/trunk/include/clang/Parse/Ownership.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Ownership.h?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/Ownership.h (original)
+++ cfe/trunk/include/clang/Parse/Ownership.h Thu Dec 11 15:36:32 2008
@@ -150,12 +150,6 @@
   public:
     typedef ActionBase::ActionResult<DestroyerToUID<Destroyer>::UID> DumbResult;
 
-    // For convenience and compatibility.
-    ASTOwningResult(bool invalid = false)
-      : Actions(0), Node(0), Invalid(invalid) {}
-    // Same
-    ASTOwningResult(const DiagnosticBuilder &)
-      : Actions(0), Node(0), Invalid(true) {}
     explicit ASTOwningResult(ActionBase &actions, bool invalid = false)
       : Actions(&actions), Node(0), Invalid(invalid) {}
     ASTOwningResult(ActionBase &actions, void *node)

Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Thu Dec 11 15:36:32 2008
@@ -98,6 +98,8 @@
 
   OwningExprResult ExprError() { return OwningExprResult(Actions, true); }
   OwningStmtResult StmtError() { return OwningStmtResult(Actions, true); }
+  OwningExprResult ExprError(const DiagnosticBuilder &) { return ExprError(); }
+  OwningStmtResult StmtError(const DiagnosticBuilder &) { return StmtError(); }
 
   // Parsing methods.
   
@@ -479,15 +481,16 @@
   //===--------------------------------------------------------------------===//
   // C99 6.5: Expressions.
 
-  ExprResult ParseExpression();
-  ExprResult ParseConstantExpression();
-  ExprResult ParseAssignmentExpression();  // Expr that doesn't include commas.
-  
+  OwningExprResult ParseExpression();
+  OwningExprResult ParseConstantExpression();
+  // Expr that doesn't include commas.
+  OwningExprResult ParseAssignmentExpression();
+
   ExprResult ParseExpressionWithLeadingAt(SourceLocation AtLoc);
 
   ExprResult ParseRHSOfBinaryExpression(ExprResult LHS, unsigned MinPrec);
-  ExprResult ParseCastExpression(bool isUnaryExpression);
-  ExprResult ParsePostfixExpressionSuffix(ExprResult LHS);
+  OwningExprResult ParseCastExpression(bool isUnaryExpression);
+  OwningExprResult ParsePostfixExpressionSuffix(OwningExprResult LHS);
   ExprResult ParseSizeofAlignofExpression();
   ExprResult ParseBuiltinPrimaryExpression();
 
@@ -568,7 +571,7 @@
 
   //===--------------------------------------------------------------------===//
   // C++ if/switch/while/for condition expression.
-  ExprResult ParseCXXCondition();
+  OwningExprResult ParseCXXCondition();
 
   //===--------------------------------------------------------------------===//
   // C++ types
@@ -582,7 +585,7 @@
   ///         '{' ...
   ExprResult ParseInitializer() {
     if (Tok.isNot(tok::l_brace))
-      return ParseAssignmentExpression();
+      return ParseAssignmentExpression().result();
     return ParseBraceInitializer();
   }
   ExprResult ParseBraceInitializer();

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Thu Dec 11 15:36:32 2008
@@ -126,7 +126,7 @@
             
             // now parse the non-empty comma separated list of expressions
             while (1) {
-              OwningExprResult ArgExpr(Actions, ParseAssignmentExpression());
+              OwningExprResult ArgExpr(ParseAssignmentExpression());
               if (ArgExpr.isInvalid()) {
                 ArgExprsOk = false;
                 SkipUntil(tok::r_paren);
@@ -158,7 +158,7 @@
             
             // now parse the list of expressions
             while (1) {
-              OwningExprResult ArgExpr(Actions, ParseAssignmentExpression());
+              OwningExprResult ArgExpr(ParseAssignmentExpression());
               if (ArgExpr.isInvalid()) {
                 ArgExprsOk = false;
                 SkipUntil(tok::r_paren);
@@ -842,7 +842,7 @@
     
     if (Tok.is(tok::colon)) {
       ConsumeToken();
-      OwningExprResult Res(Actions, ParseConstantExpression());
+      OwningExprResult Res(ParseConstantExpression());
       if (Res.isInvalid())
         SkipUntil(tok::semi, true, true);
       else
@@ -1796,7 +1796,7 @@
         ConsumeToken();
         
         // Parse the default argument
-        OwningExprResult DefArgResult(Actions, ParseAssignmentExpression());
+        OwningExprResult DefArgResult(ParseAssignmentExpression());
         if (DefArgResult.isInvalid()) {
           SkipUntil(tok::comma, tok::r_paren, true, true);
         } else {
@@ -1992,8 +1992,7 @@
       return;
     }
 
-    OwningExprResult Result(Actions,
-                            ParseCastExpression(true/*isUnaryExpression*/));
+    OwningExprResult Result(ParseCastExpression(true/*isUnaryExpression*/));
     if (Result.isInvalid())
       return;
 
@@ -2025,7 +2024,7 @@
     if (DS.SetTypeSpecType(DeclSpec::TST_typeofType, StartLoc, PrevSpec, Ty))
       Diag(StartLoc, diag::err_invalid_decl_spec_combination) << PrevSpec;
   } else { // we have an expression.
-    OwningExprResult Result(Actions, ParseExpression());
+    OwningExprResult Result(ParseExpression());
 
     if (Result.isInvalid() || Tok.isNot(tok::r_paren)) {
       MatchRHSPunctuation(tok::r_paren, LParenLoc);

Modified: cfe/trunk/lib/Parse/ParseExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExpr.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseExpr.cpp (original)
+++ cfe/trunk/lib/Parse/ParseExpr.cpp Thu Dec 11 15:36:32 2008
@@ -169,14 +169,14 @@
 ///         assignment-expression
 ///         expression ',' assignment-expression
 ///
-Parser::ExprResult Parser::ParseExpression() {
+Parser::OwningExprResult Parser::ParseExpression() {
   if (Tok.is(tok::kw_throw))
-    return ParseThrowExpression();
+    return Owned(ParseThrowExpression());
 
-  OwningExprResult LHS(Actions, ParseCastExpression(false));
-  if (LHS.isInvalid()) return LHS.result();
-  
-  return ParseRHSOfBinaryExpression(LHS.result(), prec::Comma);
+  OwningExprResult LHS(ParseCastExpression(false));
+  if (LHS.isInvalid()) return move(LHS);
+
+  return Owned(ParseRHSOfBinaryExpression(LHS.result(), prec::Comma));
 }
 
 /// This routine is called when the '@' is seen and consumed. 
@@ -193,14 +193,14 @@
 
 /// ParseAssignmentExpression - Parse an expr that doesn't include commas.
 ///
-Parser::ExprResult Parser::ParseAssignmentExpression() {
+Parser::OwningExprResult Parser::ParseAssignmentExpression() {
   if (Tok.is(tok::kw_throw))
-    return ParseThrowExpression();
+    return Owned(ParseThrowExpression());
 
-  OwningExprResult LHS(Actions, ParseCastExpression(false));
-  if (LHS.isInvalid()) return LHS.result();
-  
-  return ParseRHSOfBinaryExpression(LHS.result(), prec::Assignment);
+  OwningExprResult LHS(ParseCastExpression(false));
+  if (LHS.isInvalid()) return move(LHS);
+
+  return Owned(ParseRHSOfBinaryExpression(LHS.result(), prec::Assignment));
 }
 
 /// ParseAssignmentExprWithObjCMessageExprStart - Parse an assignment expression
@@ -220,17 +220,17 @@
                                                              ReceiverName,
                                                              ReceiverExpr));
   if (R.isInvalid()) return R.result();
-  R = ParsePostfixExpressionSuffix(R.result());
+  R = ParsePostfixExpressionSuffix(move(R));
   if (R.isInvalid()) return R.result();
   return ParseRHSOfBinaryExpression(R.result(), 2);
 }
 
 
-Parser::ExprResult Parser::ParseConstantExpression() {
-  OwningExprResult LHS(Actions, ParseCastExpression(false));
-  if (LHS.isInvalid()) return LHS.result();
-  
-  return ParseRHSOfBinaryExpression(LHS.result(), prec::Conditional);
+Parser::OwningExprResult Parser::ParseConstantExpression() {
+  OwningExprResult LHS(ParseCastExpression(false));
+  if (LHS.isInvalid()) return move(LHS);
+
+  return Owned(ParseRHSOfBinaryExpression(LHS.result(), prec::Conditional));
 }
 
 /// ParseRHSOfBinaryExpression - Parse a binary expression that starts with
@@ -281,7 +281,7 @@
     }
     
     // Parse another leaf here for the RHS of the operator.
-    OwningExprResult RHS(Actions, ParseCastExpression(false));
+    OwningExprResult RHS(ParseCastExpression(false));
     if (RHS.isInvalid())
       return RHS.result();
 
@@ -410,7 +410,7 @@
 ///                   '::'[opt] 'delete' cast-expression
 ///                   '::'[opt] 'delete' '[' ']' cast-expression
 ///
-Parser::ExprResult Parser::ParseCastExpression(bool isUnaryExpression) {
+Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression) {
   if (getLang().CPlusPlus) {
     // Annotate typenames and C++ scope specifiers.
     // Used only in C++, where the typename can be considered as a functional
@@ -444,7 +444,7 @@
     SourceLocation LParenLoc = Tok.getLocation();
     SourceLocation RParenLoc;
     Res = ParseParenExpression(ParenExprType, CastTy, RParenLoc);
-    if (Res.isInvalid()) return Res.result();
+    if (Res.isInvalid()) return move(Res);
     
     switch (ParenExprType) {
     case SimpleExpr:   break;    // Nothing else to do.
@@ -461,27 +461,27 @@
       if (!Res.isInvalid())
         Res = Actions.ActOnCastExpr(LParenLoc, CastTy, RParenLoc,
                                     Res.release());
-      return Res.result();
+      return move(Res);
     }
 
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   }
 
     // primary-expression
   case tok::numeric_constant:
     // constant: integer-constant
     // constant: floating-constant
-    
+
     Res = Actions.ActOnNumericConstant(Tok);
     ConsumeToken();
-    
+
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
 
   case tok::kw_true:
   case tok::kw_false:
-    return ParseCXXBoolLiteral();
+    return Owned(ParseCXXBoolLiteral());
 
   case tok::identifier: {      // primary-expression: identifier
                                // unqualified-id: identifier
@@ -495,42 +495,43 @@
     SourceLocation L = ConsumeToken();
     Res = Actions.ActOnIdentifierExpr(CurScope, L, II, Tok.is(tok::l_paren));
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   }
   case tok::char_constant:     // constant: character-constant
     Res = Actions.ActOnCharacterConstant(Tok);
     ConsumeToken();
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   case tok::kw___func__:       // primary-expression: __func__ [C99 6.4.2.2]
   case tok::kw___FUNCTION__:   // primary-expression: __FUNCTION__ [GNU]
   case tok::kw___PRETTY_FUNCTION__:  // primary-expression: __P..Y_F..N__ [GNU]
     Res = Actions.ActOnPredefinedExpr(Tok.getLocation(), SavedKind);
     ConsumeToken();
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   case tok::string_literal:    // primary-expression: string-literal
   case tok::wide_string_literal:
     Res = ParseStringLiteralExpression();
-    if (Res.isInvalid()) return Res.result();
+    if (Res.isInvalid()) return move(Res);
     // This can be followed by postfix-expr pieces (e.g. "foo"[1]).
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   case tok::kw___builtin_va_arg:
   case tok::kw___builtin_offsetof:
   case tok::kw___builtin_choose_expr:
   case tok::kw___builtin_overload:
   case tok::kw___builtin_types_compatible_p:
-    return ParseBuiltinPrimaryExpression();
+    return Owned(ParseBuiltinPrimaryExpression());
   case tok::kw___null:
-    return Actions.ActOnGNUNullExpr(ConsumeToken());
+    return Owned(Actions.ActOnGNUNullExpr(ConsumeToken()));
     break;
   case tok::plusplus:      // unary-expression: '++' unary-expression
   case tok::minusminus: {  // unary-expression: '--' unary-expression
     SourceLocation SavedLoc = ConsumeToken();
     Res = ParseCastExpression(true);
     if (!Res.isInvalid())
-      Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, Res.release());
-    return Res.result();
+      Res = Owned(Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind,
+                                       Res.release()));
+    return move(Res);
   }
   case tok::amp:           // unary-expression: '&' cast-expression
   case tok::star:          // unary-expression: '*' cast-expression
@@ -544,7 +545,7 @@
     Res = ParseCastExpression(false);
     if (!Res.isInvalid())
       Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, Res.release());
-    return Res.result();
+    return move(Res);
   }
 
   case tok::kw___extension__:{//unary-expression:'__extension__' cast-expr [GNU]
@@ -554,7 +555,7 @@
     Res = ParseCastExpression(false);
     if (!Res.isInvalid())
       Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, Res.release());
-    return Res.result();
+    return move(Res);
   }
   case tok::kw_sizeof:     // unary-expression: 'sizeof' unary-expression
                            // unary-expression: 'sizeof' '(' type-name ')'
@@ -562,19 +563,17 @@
   case tok::kw___alignof:  // unary-expression: '__alignof' unary-expression
                            // unary-expression: '__alignof' '(' type-name ')'
                            // unary-expression: 'alignof' '(' type-id ')'
-    return ParseSizeofAlignofExpression();
+    return Owned(ParseSizeofAlignofExpression());
   case tok::ampamp: {      // unary-expression: '&&' identifier
     SourceLocation AmpAmpLoc = ConsumeToken();
-    if (Tok.isNot(tok::identifier)) {
-      Diag(Tok, diag::err_expected_ident);
-      return ExprResult(true);
-    }
+    if (Tok.isNot(tok::identifier))
+      return ExprError(Diag(Tok, diag::err_expected_ident));
 
     Diag(AmpAmpLoc, diag::ext_gnu_address_of_label);
     Res = Actions.ActOnAddrLabel(AmpAmpLoc, Tok.getLocation(),
                                  Tok.getIdentifierInfo());
     ConsumeToken();
-    return Res.result();
+    return move(Res);
   }
   case tok::kw_const_cast:
   case tok::kw_dynamic_cast:
@@ -582,15 +581,15 @@
   case tok::kw_static_cast:
     Res = ParseCXXCasts();
     // These can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   case tok::kw_typeid:
     Res = ParseCXXTypeid();
     // This can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   case tok::kw_this:
     Res = ParseCXXThis();
     // This can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
 
   case tok::kw_char:
   case tok::kw_wchar_t:
@@ -613,54 +612,54 @@
     DeclSpec DS;
     ParseCXXSimpleTypeSpecifier(DS);
     if (Tok.isNot(tok::l_paren))
-      return Diag(Tok, diag::err_expected_lparen_after_type)
-              << DS.getSourceRange();
+      return ExprError(Diag(Tok, diag::err_expected_lparen_after_type)
+                         << DS.getSourceRange());
 
     Res = ParseCXXTypeConstructExpression(DS);
     // This can be followed by postfix-expr pieces.
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
   }
 
   case tok::annot_cxxscope: // [C++] id-expression: qualified-id
   case tok::kw_operator: // [C++] id-expression: operator/conversion-function-id
                          //                      template-id
     Res = ParseCXXIdExpression();
-    return ParsePostfixExpressionSuffix(Res.result());
+    return ParsePostfixExpressionSuffix(move(Res));
 
   case tok::coloncolon: // [C++] new-expression or [C++] delete-expression
     // If the next token is neither 'new' nor 'delete', the :: would have been
     // parsed as a scope specifier already.
     if (NextToken().is(tok::kw_new))
-      return ParseCXXNewExpression();
+      return Owned(ParseCXXNewExpression());
     else
-      return ParseCXXDeleteExpression();
+      return Owned(ParseCXXDeleteExpression());
 
   case tok::kw_new: // [C++] new-expression
-    return ParseCXXNewExpression();
+    return Owned(ParseCXXNewExpression());
 
   case tok::kw_delete: // [C++] delete-expression
-    return ParseCXXDeleteExpression();
+    return Owned(ParseCXXDeleteExpression());
 
   case tok::at: {
     SourceLocation AtLoc = ConsumeToken();
-    return ParseObjCAtExpression(AtLoc);
+    return Owned(ParseObjCAtExpression(AtLoc));
   }
   case tok::l_square:
     // These can be followed by postfix-expr pieces.
     if (getLang().ObjC1)
-      return ParsePostfixExpressionSuffix(ParseObjCMessageExpression());
+      return ParsePostfixExpressionSuffix(Owned(ParseObjCMessageExpression()));
     // FALL THROUGH.
   case tok::caret:
     if (getLang().Blocks)
-      return ParsePostfixExpressionSuffix(ParseBlockLiteralExpression());
+      return ParsePostfixExpressionSuffix(Owned(ParseBlockLiteralExpression()));
     Diag(Tok, diag::err_expected_expression);
-    return ExprResult(true);
+    return ExprError();
   default:
   UnhandledToken:
     Diag(Tok, diag::err_expected_expression);
-    return ExprResult(true);
+    return ExprError();
   }
-  
+
   // unreachable.
   abort();
 }
@@ -683,18 +682,18 @@
 ///         argument-expression
 ///         argument-expression-list ',' assignment-expression
 ///
-Parser::ExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHSArg) {
-  OwningExprResult LHS(Actions, LHSArg);
+Parser::OwningExprResult
+Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
   // Now that the primary-expression piece of the postfix-expression has been
   // parsed, see if there are any postfix-expression pieces here.
   SourceLocation Loc;
   while (1) {
     switch (Tok.getKind()) {
     default:  // Not a postfix-expression suffix.
-      return LHS.result();
+      return move(LHS);
     case tok::l_square: {  // postfix-expression: p-e '[' expression ']'
       Loc = ConsumeBracket();
-      OwningExprResult Idx(Actions, ParseExpression());
+      OwningExprResult Idx(ParseExpression());
 
       SourceLocation RLoc = Tok.getLocation();
 
@@ -702,7 +701,7 @@
         LHS = Actions.ActOnArraySubscriptExpr(CurScope, LHS.release(), Loc,
                                               Idx.release(), RLoc);
       } else
-        LHS = ExprResult(true);
+        LHS = ExprError();
 
       // Match the ']'.
       MatchRHSPunctuation(tok::r_square, Loc);
@@ -712,16 +711,16 @@
     case tok::l_paren: {   // p-e: p-e '(' argument-expression-list[opt] ')'
       ExprVector ArgExprs(Actions);
       CommaLocsTy CommaLocs;
-      
+
       Loc = ConsumeParen();
-      
+
       if (Tok.isNot(tok::r_paren)) {
         if (ParseExpressionList(ArgExprs, CommaLocs)) {
           SkipUntil(tok::r_paren);
-          return ExprResult(true);
+          return ExprError();
         }
       }
-        
+
       // Match the ')'.
       if (!LHS.isInvalid() && Tok.is(tok::r_paren)) {
         assert((ArgExprs.size() == 0 || ArgExprs.size()-1 == CommaLocs.size())&&
@@ -731,7 +730,7 @@
                                     ArgExprs.size(), &CommaLocs[0],
                                     Tok.getLocation());
       }
-      
+
       MatchRHSPunctuation(tok::r_paren, Loc);
       break;
     }
@@ -739,12 +738,12 @@
     case tok::period: {    // postfix-expression: p-e '.' identifier
       tok::TokenKind OpKind = Tok.getKind();
       SourceLocation OpLoc = ConsumeToken();  // Eat the "." or "->" token.
-      
+
       if (Tok.isNot(tok::identifier)) {
         Diag(Tok, diag::err_expected_ident);
-        return ExprResult(true);
+        return ExprError();
       }
-      
+
       if (!LHS.isInvalid()) {
         LHS = Actions.ActOnMemberReferenceExpr(LHS.release(), OpLoc, OpKind,
                                                Tok.getLocation(),
@@ -805,7 +804,7 @@
     // If this is a parenthesized expression, it is the start of a 
     // unary-expression, but doesn't include any postfix pieces.  Parse these
     // now if present.
-    Operand = ParsePostfixExpressionSuffix(Operand.result());
+    Operand = ParsePostfixExpressionSuffix(move(Operand));
   }
   
   // If we get here, the operand to the sizeof/alignof was an expresion.
@@ -851,7 +850,7 @@
   switch (T) {
   default: assert(0 && "Not a builtin primary expression!");
   case tok::kw___builtin_va_arg: {
-    OwningExprResult Expr(Actions, ParseAssignmentExpression());
+    OwningExprResult Expr(ParseAssignmentExpression());
     if (Expr.isInvalid()) {
       SkipUntil(tok::r_paren);
       return ExprResult(true);
@@ -933,7 +932,7 @@
     break;
   }
   case tok::kw___builtin_choose_expr: {
-    OwningExprResult Cond(Actions, ParseAssignmentExpression());
+    OwningExprResult Cond(ParseAssignmentExpression());
     if (Cond.isInvalid()) {
       SkipUntil(tok::r_paren);
       return Cond.result();
@@ -941,7 +940,7 @@
     if (ExpectAndConsume(tok::comma, diag::err_expected_comma, "",tok::r_paren))
       return ExprResult(true);
     
-    OwningExprResult Expr1(Actions, ParseAssignmentExpression());
+    OwningExprResult Expr1(ParseAssignmentExpression());
     if (Expr1.isInvalid()) {
       SkipUntil(tok::r_paren);
       return Expr1.result();
@@ -949,7 +948,7 @@
     if (ExpectAndConsume(tok::comma, diag::err_expected_comma, "",tok::r_paren))
       return ExprResult(true);
     
-    OwningExprResult Expr2(Actions, ParseAssignmentExpression());
+    OwningExprResult Expr2(ParseAssignmentExpression());
     if (Expr2.isInvalid()) {
       SkipUntil(tok::r_paren);
       return Expr2.result();
@@ -970,7 +969,7 @@
     // comma.  If there is no comma, break and attempt to match r-paren.
     if (Tok.isNot(tok::r_paren)) {
       while (1) {
-        OwningExprResult ArgExpr(Actions, ParseAssignmentExpression());
+        OwningExprResult ArgExpr(ParseAssignmentExpression());
         if (ArgExpr.isInvalid()) {
           SkipUntil(tok::r_paren);
           return ExprResult(true);
@@ -1008,11 +1007,11 @@
     }
     Res = Actions.ActOnTypesCompatibleExpr(StartLoc, Ty1, Ty2, ConsumeParen());
     break;
-  }      
-  
+  }
+
   // These can be followed by postfix-expr pieces because they are
   // primary-expressions.
-  return ParsePostfixExpressionSuffix(Res.result());
+  return ParsePostfixExpressionSuffix(move(Res)).result();
 }
 
 /// ParseParenExpression - This parses the unit that starts with a '(' token,
@@ -1130,7 +1129,7 @@
 ///
 bool Parser::ParseExpressionList(ExprListTy &Exprs, CommaLocsTy &CommaLocs) {
   while (1) {
-    OwningExprResult Expr(Actions, ParseAssignmentExpression());
+    OwningExprResult Expr(ParseAssignmentExpression());
     if (Expr.isInvalid())
       return true;
 

Modified: cfe/trunk/lib/Parse/ParseExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExprCXX.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseExprCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseExprCXX.cpp Thu Dec 11 15:36:32 2008
@@ -310,7 +310,7 @@
     return Actions.ActOnCXXThrow(ThrowLoc);
 
   default:
-    OwningExprResult Expr(Actions, ParseAssignmentExpression());
+    OwningExprResult Expr(ParseAssignmentExpression());
     if (Expr.isInvalid()) return Expr.result();
     return Actions.ActOnCXXThrow(ThrowLoc, Expr.release());
   }
@@ -372,7 +372,7 @@
 /// [GNU]   type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]
 ///             '=' assignment-expression
 ///
-Parser::ExprResult Parser::ParseCXXCondition() {
+Parser::OwningExprResult Parser::ParseCXXCondition() {
   if (!isCXXConditionDeclaration())
     return ParseExpression(); // expression
 
@@ -391,7 +391,7 @@
     OwningExprResult AsmLabel(ParseSimpleAsm());
     if (AsmLabel.isInvalid()) {
       SkipUntil(tok::semi);
-      return true;
+      return ExprError();
     }
     DeclaratorInfo.setAsmLabel(AsmLabel.release());
   }
@@ -402,15 +402,15 @@
 
   // '=' assignment-expression
   if (Tok.isNot(tok::equal))
-    return Diag(Tok, diag::err_expected_equal_after_declarator);
+    return ExprError(Diag(Tok, diag::err_expected_equal_after_declarator));
   SourceLocation EqualLoc = ConsumeToken();
-  OwningExprResult AssignExpr(Actions, ParseAssignmentExpression());
+  OwningExprResult AssignExpr(ParseAssignmentExpression());
   if (AssignExpr.isInvalid())
-    return true;
-  
-  return Actions.ActOnCXXConditionDeclarationExpr(CurScope, StartLoc,
-                                                  DeclaratorInfo, EqualLoc,
-                                                  AssignExpr.release());
+    return ExprError();
+
+  return Owned(Actions.ActOnCXXConditionDeclarationExpr(CurScope, StartLoc,
+                                                        DeclaratorInfo,EqualLoc,
+                                                        AssignExpr.release()));
 }
 
 /// ParseCXXSimpleTypeSpecifier - [C++ 7.1.5.2] Simple type specifiers.
@@ -776,8 +776,8 @@
   bool first = true;
   while (Tok.is(tok::l_square)) {
     SourceLocation LLoc = ConsumeBracket();
-    OwningExprResult Size(Actions, first ? ParseExpression()
-                                         : ParseConstantExpression());
+    OwningExprResult Size(first ? ParseExpression()
+                                : ParseConstantExpression());
     if (Size.isInvalid()) {
       // Recover
       SkipUntil(tok::r_square);
@@ -851,7 +851,7 @@
       return true;
   }
 
-  OwningExprResult Operand(Actions, ParseCastExpression(false));
+  OwningExprResult Operand(ParseCastExpression(false));
   if (Operand.isInvalid())
     return Operand.result();
 

Modified: cfe/trunk/lib/Parse/ParseInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseInit.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseInit.cpp (original)
+++ cfe/trunk/lib/Parse/ParseInit.cpp Thu Dec 11 15:36:32 2008
@@ -143,7 +143,7 @@
     // 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.
-    OwningExprResult Idx(Actions, ParseAssignmentExpression());
+    OwningExprResult Idx(ParseAssignmentExpression());
     if (Idx.isInvalid()) {
       SkipUntil(tok::r_square);
       return Idx.result();
@@ -184,8 +184,8 @@
       // Handle the gnu array range extension.
       Diag(Tok, diag::ext_gnu_array_range);
       ConsumeToken();
-      
-      OwningExprResult RHS(Actions, ParseConstantExpression());
+
+      OwningExprResult RHS(ParseConstantExpression());
       if (RHS.isInvalid()) {
         SkipUntil(tok::r_square);
         return RHS.result();

Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Thu Dec 11 15:36:32 2008
@@ -1199,7 +1199,7 @@
     return StmtError();
   }
   ConsumeParen();  // '('
-  OwningExprResult Res(Actions, ParseExpression());
+  OwningExprResult Res(ParseExpression());
   if (Res.isInvalid()) {
     SkipUntil(tok::semi);
     return StmtError();
@@ -1397,18 +1397,22 @@
   switch (Tok.getKind()) {
   case tok::string_literal:    // primary-expression: string-literal
   case tok::wide_string_literal:
-    return ParsePostfixExpressionSuffix(ParseObjCStringLiteral(AtLoc));
+    return ParsePostfixExpressionSuffix(
+      Owned(ParseObjCStringLiteral(AtLoc))).result();
   default:
     if (Tok.getIdentifierInfo() == 0)
       return Diag(AtLoc, diag::err_unexpected_at);
-      
+
     switch (Tok.getIdentifierInfo()->getObjCKeywordID()) {
     case tok::objc_encode:
-      return ParsePostfixExpressionSuffix(ParseObjCEncodeExpression(AtLoc));
+      return ParsePostfixExpressionSuffix(
+        Owned(ParseObjCEncodeExpression(AtLoc))).result();
     case tok::objc_protocol:
-      return ParsePostfixExpressionSuffix(ParseObjCProtocolExpression(AtLoc));
+      return ParsePostfixExpressionSuffix(
+        Owned(ParseObjCProtocolExpression(AtLoc))).result();
     case tok::objc_selector:
-      return ParsePostfixExpressionSuffix(ParseObjCSelectorExpression(AtLoc));
+      return ParsePostfixExpressionSuffix(
+        Owned(ParseObjCSelectorExpression(AtLoc))).result();
     default:
         return Diag(AtLoc, diag::err_unexpected_at);
     }
@@ -1433,7 +1437,7 @@
     return ParseObjCMessageExpressionBody(LBracLoc, NameLoc, ReceiverName, 0);
   }
 
-  OwningExprResult Res(Actions, ParseExpression());
+  OwningExprResult Res(ParseExpression());
   if (Res.isInvalid()) {
     SkipUntil(tok::r_square);
     return Res.result();
@@ -1492,7 +1496,7 @@
       
       ConsumeToken(); // Eat the ':'.
       ///  Parse the expression after ':' 
-      OwningExprResult Res(Actions, ParseAssignmentExpression());
+      OwningExprResult Res(ParseAssignmentExpression());
       if (Res.isInvalid()) {
         // We must manually skip to a ']', otherwise the expression skipper will
         // stop at the ']' when it skips to the ';'.  We want it to skip beyond
@@ -1514,7 +1518,7 @@
     while (Tok.is(tok::comma)) {
       ConsumeToken(); // Eat the ','.
       ///  Parse the expression after ',' 
-      OwningExprResult Res(Actions, ParseAssignmentExpression());
+      OwningExprResult Res(ParseAssignmentExpression());
       if (Res.isInvalid()) {
         // We must manually skip to a ']', otherwise the expression skipper will
         // stop at the ']' when it skips to the ';'.  We want it to skip beyond

Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=60900&r1=60899&r2=60900&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
+++ cfe/trunk/lib/Parse/ParseStmt.cpp Thu Dec 11 15:36:32 2008
@@ -107,7 +107,7 @@
       return StmtError();
     } else {
       // expression[opt] ';'
-      OwningExprResult Expr(Actions, ParseExpression());
+      OwningExprResult Expr(ParseExpression());
       if (Expr.isInvalid()) {
         // If the expression is invalid, skip ahead to the next semicolon.  Not
         // doing this opens us up to the possibility of infinite loops if
@@ -226,7 +226,7 @@
   assert(Tok.is(tok::kw_case) && "Not a case stmt!");
   SourceLocation CaseLoc = ConsumeToken();  // eat the 'case'.
 
-  OwningExprResult LHS(Actions, ParseConstantExpression());
+  OwningExprResult LHS(ParseConstantExpression());
   if (LHS.isInvalid()) {
     SkipUntil(tok::colon);
     return StmtError();
@@ -379,7 +379,7 @@
       } else {
         // Otherwise this was a unary __extension__ marker.  Parse the
         // subexpression and add the __extension__ unary op. 
-        OwningExprResult Res(Actions, ParseCastExpression(false));
+        OwningExprResult Res(ParseCastExpression(false));
 
         if (Res.isInvalid()) {
           SkipUntil(tok::semi);
@@ -940,7 +940,7 @@
     // GNU indirect goto extension.
     Diag(Tok, diag::ext_gnu_indirect_goto);
     SourceLocation StarLoc = ConsumeToken();
-    OwningExprResult R(Actions, ParseExpression());
+    OwningExprResult R(ParseExpression());
     if (R.isInvalid()) {  // Skip to the semicolon, but don't consume it.
       SkipUntil(tok::semi, false, true);
       return StmtError();





More information about the cfe-commits mailing list