From 109faf2b8b6f01b941fd257a4850e57c7c9a0a2e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 4 Jan 2009 21:25:24 +0000 Subject: eliminate lookahead when parsing ::new / ::delete. llvm-svn: 61638 --- clang/lib/Parse/ParseExpr.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'clang/lib/Parse/ParseExpr.cpp') diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 0c25fab4f44..f719b8914f5 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -626,19 +626,23 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression) { Res = ParseCXXIdExpression(); 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(); - else - return ParseCXXDeleteExpression(); + case tok::coloncolon: { // [C++] new-expression or [C++] delete-expression + SourceLocation ScopeLoc = ConsumeToken(); + if (Tok.is(tok::kw_new)) + return ParseCXXNewExpression(true, ScopeLoc); + else { + // If the next token is neither 'new' nor 'delete', the :: would have been + // parsed as a scope specifier already. + assert(Tok.is(tok::kw_delete)); + return ParseCXXDeleteExpression(true, ScopeLoc); + } + } case tok::kw_new: // [C++] new-expression - return ParseCXXNewExpression(); + return ParseCXXNewExpression(false, Tok.getLocation()); case tok::kw_delete: // [C++] delete-expression - return ParseCXXDeleteExpression(); + return ParseCXXDeleteExpression(false, Tok.getLocation()); case tok::at: { SourceLocation AtLoc = ConsumeToken(); -- cgit v1.2.3