From: David Majnemer Date: Mon, 12 Jan 2015 09:16:57 +0000 (+0000) Subject: Parse: Get rid of cxx_exceptspec_end, use EOF instead X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0facee5f614db7d4328856cdab4e397dd703cc83;p=clang Parse: Get rid of cxx_exceptspec_end, use EOF instead Similar to r225619, use a special EOF token to mark the end of the exception specification instead of cxx_exceptspec_end. Use the current scope as the marker. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225622 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def index e0cc3631ff..da106227c2 100644 --- a/include/clang/Basic/TokenKinds.def +++ b/include/clang/Basic/TokenKinds.def @@ -116,7 +116,6 @@ TOK(eof) // End of file. TOK(eod) // End of preprocessing directive (end of line inside a // directive). TOK(code_completion) // Code completion marker -TOK(cxx_exceptspec_end) // C++ exception-specification end marker // C99 6.4.9: Comments. TOK(comment) // Comment (only in -E -C[C] mode) diff --git a/lib/Parse/ParseCXXInlineMethods.cpp b/lib/Parse/ParseCXXInlineMethods.cpp index 0d5bb2e97d..03784b4f5e 100644 --- a/lib/Parse/ParseCXXInlineMethods.cpp +++ b/lib/Parse/ParseCXXInlineMethods.cpp @@ -418,7 +418,7 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) { ExceptionSpecTokens); // Clean up the remaining tokens. - if (Tok.is(tok::cxx_exceptspec_end)) + if (Tok.is(tok::eof) && Tok.getEofData() == Actions.CurScope) ConsumeToken(); else if (EST != EST_None) Diag(Tok.getLocation(), diag::err_except_spec_unparsed); @@ -437,8 +437,11 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) { // There could be leftover tokens (e.g. because of an error). // Skip through until we reach the original token position. - while (Tok.getLocation() != origLoc && Tok.isNot(tok::eof)) + while (Tok.getLocation() != origLoc) { + if (Tok.is(tok::eof) && Tok.getEofData() != Actions.CurScope) + break; ConsumeAnyToken(); + } delete Toks; LM.ExceptionSpecTokens = nullptr; diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index 10568b3671..09239f467e 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -3163,8 +3163,9 @@ Parser::tryParseExceptionSpecification(bool Delayed, // Add the 'stop' token. Token End; End.startToken(); - End.setKind(tok::cxx_exceptspec_end); + End.setKind(tok::eof); End.setLocation(Tok.getLocation()); + End.setEofData(Actions.CurScope); ExceptionSpecTokens->push_back(End); return EST_Unparsed; }