diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-12-10 00:02:53 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-12-10 00:02:53 +0000 |
commit | effa8d1c97b00a3f53e972b0e61d9aade5ea1c57 (patch) | |
tree | 841987d02feb0d8e50485212e3580660c5c1847e /lib/Parse/Parser.cpp | |
parent | 1d6c14bd27ee4945aa453ab2e8d2b3dfca374318 (diff) |
Modify the move emulation according to the excellent design of Howard Hinnant. Makes for much nicer syntax when smart pointers are used consistently. Also, start converting internal argument passing of Parser to smart pointers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60809 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/Parser.cpp')
-rw-r--r-- | lib/Parse/Parser.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index b4c12fa2ad..d040efd7ac 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -336,13 +336,13 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() { return ParseExternalDeclaration(); } case tok::kw_asm: { - OwningExprResult Result(Actions, ParseSimpleAsm()); + OwningExprResult Result(ParseSimpleAsm()); ExpectAndConsume(tok::semi, diag::err_expected_semi_after, "top-level asm block"); if (!Result.isInvalid()) - return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), Result.move()); + return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), Result.release()); return 0; } case tok::at: @@ -666,18 +666,18 @@ void Parser::ParseKNRParamDeclarations(Declarator &D) { /// [GNU] asm-string-literal: /// string-literal /// -Parser::ExprResult Parser::ParseAsmStringLiteral() { +Parser::OwningExprResult Parser::ParseAsmStringLiteral() { if (!isTokenStringLiteral()) { Diag(Tok, diag::err_expected_string_literal); - return true; + return OwningExprResult(true); } OwningExprResult Res(Actions, ParseStringLiteralExpression()); - if (Res.isInvalid()) return true; + if (Res.isInvalid()) return move(Res); // TODO: Diagnose: wide string literal in 'asm' - return Res.move(); + return move(Res); } /// ParseSimpleAsm @@ -685,25 +685,25 @@ Parser::ExprResult Parser::ParseAsmStringLiteral() { /// [GNU] simple-asm-expr: /// 'asm' '(' asm-string-literal ')' /// -Parser::ExprResult Parser::ParseSimpleAsm() { +Parser::OwningExprResult Parser::ParseSimpleAsm() { assert(Tok.is(tok::kw_asm) && "Not an asm!"); SourceLocation Loc = ConsumeToken(); if (Tok.isNot(tok::l_paren)) { Diag(Tok, diag::err_expected_lparen_after) << "asm"; - return true; + return OwningExprResult(true); } ConsumeParen(); - OwningExprResult Result(Actions, ParseAsmStringLiteral()); + OwningExprResult Result(ParseAsmStringLiteral()); if (Result.isInvalid()) SkipUntil(tok::r_paren); else MatchRHSPunctuation(tok::r_paren, Loc); - return Result.move(); + return move(Result); } /// TryAnnotateTypeOrScopeToken - If the current token position is on a |