Hi Sebastian, Your recent smart pointer work isn't happy on Windows.
I get 52 identical errors that all say 'clang::ASTOwningResult<Destroyer>::operator =': cannot access private member declared in class 'clang::ASTOwningResult<Destroyer>' Please advise - thanks, snaroff On Dec 11, 2008, at 4:37 PM, Sebastian Redl wrote: > 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(); > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
