diff options
Diffstat (limited to 'lib/Parse/ParseStmt.cpp')
-rw-r--r-- | lib/Parse/ParseStmt.cpp | 96 |
1 files changed, 49 insertions, 47 deletions
diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index c99d8efd11..f244e4ba98 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -116,7 +116,7 @@ Parser::StmtResult Parser::ParseStatementOrDeclaration(bool OnlyStatement) { } // Otherwise, eat the semicolon. ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr); - return Actions.ActOnExprStmt(Expr.move()); + return Actions.ActOnExprStmt(Expr.release()); } case tok::kw_case: // C99 6.8.1: labeled-statement @@ -163,7 +163,7 @@ Parser::StmtResult Parser::ParseStatementOrDeclaration(bool OnlyStatement) { case tok::kw_asm: bool msAsm = false; Res = ParseAsmStatement(msAsm); - if (msAsm) return Res.move(); + if (msAsm) return Res.result(); SemiError = "asm statement"; break; } @@ -176,7 +176,7 @@ Parser::StmtResult Parser::ParseStatementOrDeclaration(bool OnlyStatement) { // Skip until we see a } or ;, but don't eat it. SkipUntil(tok::r_brace, true, true); } - return Res.move(); + return Res.result(); } /// ParseLabeledStatement - We have an identifier and a ':' after it. @@ -211,7 +211,7 @@ Parser::StmtResult Parser::ParseLabeledStatement() { return Actions.ActOnLabelStmt(IdentTok.getLocation(), IdentTok.getIdentifierInfo(), - ColonLoc, SubStmt.move()); + ColonLoc, SubStmt.release()); } /// ParseCaseStatement @@ -265,8 +265,8 @@ Parser::StmtResult Parser::ParseCaseStatement() { if (SubStmt.isInvalid()) SubStmt = Actions.ActOnNullStmt(ColonLoc); - return Actions.ActOnCaseStmt(CaseLoc, LHS.move(), DotDotDotLoc, - RHS.move(), ColonLoc, SubStmt.move()); + return Actions.ActOnCaseStmt(CaseLoc, LHS.release(), DotDotDotLoc, + RHS.release(), ColonLoc, SubStmt.release()); } /// ParseDefaultStatement @@ -297,7 +297,7 @@ Parser::StmtResult Parser::ParseDefaultStatement() { return true; return Actions.ActOnDefaultStmt(DefaultLoc, ColonLoc, - SubStmt.move(), CurScope); + SubStmt.release(), CurScope); } @@ -339,7 +339,7 @@ Parser::StmtResult Parser::ParseCompoundStatement(bool isStmtExpr) { OwningStmtResult Body(Actions, ParseCompoundStatementBody(isStmtExpr)); ExitScope(); - return Body.move(); + return Body.result(); } @@ -389,19 +389,19 @@ Parser::StmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) { // Add the __extension__ node to the AST. Res = Actions.ActOnUnaryOp(CurScope, ExtLoc, tok::kw___extension__, - Res.move()); + Res.release()); if (Res.isInvalid()) continue; // Eat the semicolon at the end of stmt and convert the expr into a // statement. ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr); - R = Actions.ActOnExprStmt(Res.move()); + R = Actions.ActOnExprStmt(Res.release()); } } if (R.isUsable()) - Stmts.push_back(R.move()); + Stmts.push_back(R.release()); } // We broke out of the while loop because we found a '}' or EOF. @@ -540,8 +540,8 @@ Parser::StmtResult Parser::ParseIfStatement() { if (ElseStmt.isInvalid()) ElseStmt = Actions.ActOnNullStmt(ElseStmtLoc); - return Actions.ActOnIfStmt(IfLoc, CondExp.move(), ThenStmt.move(), - ElseLoc, ElseStmt.move()); + return Actions.ActOnIfStmt(IfLoc, CondExp.release(), ThenStmt.release(), + ElseLoc, ElseStmt.release()); } /// ParseSwitchStatement @@ -592,7 +592,8 @@ Parser::StmtResult Parser::ParseSwitchStatement() { return true; } - OwningStmtResult Switch(Actions, Actions.ActOnStartOfSwitchStmt(Cond.move())); + OwningStmtResult Switch(Actions, + Actions.ActOnStartOfSwitchStmt(Cond.release())); // C99 6.8.4p3 - In C99, the body of the switch statement is a scope, even if // there is no compound stmt. C90 does not have this clause. We only do this @@ -621,7 +622,8 @@ Parser::StmtResult Parser::ParseSwitchStatement() { ExitScope(); - return Actions.ActOnFinishSwitchStmt(SwitchLoc, Switch.move(), Body.move()); + return Actions.ActOnFinishSwitchStmt(SwitchLoc, Switch.release(), + Body.release()); } /// ParseWhileStatement @@ -693,7 +695,7 @@ Parser::StmtResult Parser::ParseWhileStatement() { if (Cond.isInvalid() || Body.isInvalid()) return true; - return Actions.ActOnWhileStmt(WhileLoc, Cond.move(), Body.move()); + return Actions.ActOnWhileStmt(WhileLoc, Cond.release(), Body.release()); } /// ParseDoStatement @@ -754,7 +756,7 @@ Parser::StmtResult Parser::ParseDoStatement() { if (Cond.isInvalid() || Body.isInvalid()) return true; - return Actions.ActOnDoStmt(DoLoc, Body.move(), WhileLoc, Cond.move()); + return Actions.ActOnDoStmt(DoLoc, Body.release(), WhileLoc, Cond.release()); } /// ParseForStatement @@ -833,8 +835,8 @@ Parser::StmtResult Parser::ParseForStatement() { // Turn the expression into a stmt. if (!Value.isInvalid()) - FirstPart = Actions.ActOnExprStmt(Value.move()); - + FirstPart = Actions.ActOnExprStmt(Value.release()); + if (Tok.is(tok::semi)) { ConsumeToken(); } @@ -871,7 +873,7 @@ Parser::StmtResult Parser::ParseForStatement() { Value = ParseExpression(); if (!Value.isInvalid()) { // Turn the expression into a stmt. - ThirdPart = Actions.ActOnExprStmt(Value.move()); + ThirdPart = Actions.ActOnExprStmt(Value.release()); } } } @@ -903,16 +905,16 @@ Parser::StmtResult Parser::ParseForStatement() { if (Body.isInvalid()) return true; - - if (!ForEach) - return Actions.ActOnForStmt(ForLoc, LParenLoc, FirstPart.move(), - SecondPart.move(), ThirdPart.move(), RParenLoc, - Body.move()); + + if (!ForEach) + return Actions.ActOnForStmt(ForLoc, LParenLoc, FirstPart.release(), + SecondPart.release(), ThirdPart.release(), + RParenLoc, Body.release()); else return Actions.ActOnObjCForCollectionStmt(ForLoc, LParenLoc, - FirstPart.move(), - SecondPart.move(), - RParenLoc, Body.move()); + FirstPart.release(), + SecondPart.release(), + RParenLoc, Body.release()); } /// ParseGotoStatement @@ -940,13 +942,13 @@ Parser::StmtResult Parser::ParseGotoStatement() { SkipUntil(tok::semi, false, true); return true; } - Res = Actions.ActOnIndirectGotoStmt(GotoLoc, StarLoc, R.move()); + Res = Actions.ActOnIndirectGotoStmt(GotoLoc, StarLoc, R.release()); } else { Diag(Tok, diag::err_expected_ident); return true; } - return Res.move(); + return Res.result(); } /// ParseContinueStatement @@ -986,7 +988,7 @@ Parser::StmtResult Parser::ParseReturnStatement() { return true; } } - return Actions.ActOnReturnStmt(ReturnLoc, R.move()); + return Actions.ActOnReturnStmt(ReturnLoc, R.release()); } /// FuzzyParseMicrosoftAsmStatement. When -fms-extensions is enabled, this @@ -1068,7 +1070,7 @@ Parser::StmtResult Parser::ParseAsmStatement(bool &msAsm) { } Loc = ConsumeParen(); - OwningExprResult AsmString(Actions, ParseAsmStringLiteral()); + OwningExprResult AsmString(ParseAsmStringLiteral()); if (AsmString.isInvalid()) return true; @@ -1095,38 +1097,38 @@ Parser::StmtResult Parser::ParseAsmStatement(bool &msAsm) { // Parse Inputs, if present. if (ParseAsmOperandsOpt(Names, Constraints, Exprs)) return true; - + assert(Names.size() == Constraints.size() && Constraints.size() == Exprs.size() && "Input operand size mismatch!"); NumInputs = Names.size() - NumOutputs; - + // Parse the clobbers, if present. if (Tok.is(tok::colon)) { ConsumeToken(); - + // Parse the asm-string list for clobbers. while (1) { - OwningExprResult Clobber(Actions, ParseAsmStringLiteral()); + OwningExprResult Clobber(ParseAsmStringLiteral()); if (Clobber.isInvalid()) break; - - Clobbers.push_back(Clobber.move()); - + + Clobbers.push_back(Clobber.release()); + if (Tok.isNot(tok::comma)) break; ConsumeToken(); } } - + RParenLoc = MatchRHSPunctuation(tok::r_paren, Loc); } - + return Actions.ActOnAsmStmt(AsmLoc, isSimple, isVolatile, NumOutputs, NumInputs, &Names[0], Constraints.take(), - Exprs.take(), AsmString.move(), + Exprs.take(), AsmString.release(), Clobbers.size(), Clobbers.take(), RParenLoc); } @@ -1173,26 +1175,26 @@ bool Parser::ParseAsmOperandsOpt(llvm::SmallVectorImpl<std::string> &Names, } else Names.push_back(std::string()); - OwningExprResult Constraint(Actions, ParseAsmStringLiteral()); + OwningExprResult Constraint(ParseAsmStringLiteral()); if (Constraint.isInvalid()) { SkipUntil(tok::r_paren); return true; } - Constraints.push_back(Constraint.move()); + Constraints.push_back(Constraint.release()); if (Tok.isNot(tok::l_paren)) { Diag(Tok, diag::err_expected_lparen_after) << "asm operand"; SkipUntil(tok::r_paren); return true; } - + // Read the parenthesized expression. OwningExprResult Res(Actions, ParseSimpleParenExpression()); if (Res.isInvalid()) { SkipUntil(tok::r_paren); return true; } - Exprs.push_back(Res.move()); + Exprs.push_back(Res.release()); // Eat the comma and continue parsing if it exists. if (Tok.isNot(tok::comma)) return false; ConsumeToken(); @@ -1215,5 +1217,5 @@ Parser::DeclTy *Parser::ParseFunctionStatementBody(DeclTy *Decl, // Leave the function body scope. ExitScope(); - return Actions.ActOnFinishFunctionBody(Decl, FnBody.move()); + return Actions.ActOnFinishFunctionBody(Decl, FnBody.release()); } |