Author: Dawid Jurczak Date: 2022-03-02T11:17:05+01:00 New Revision: d813116c9deaa960ddcce5b4b161ea589d6e9a34
URL: https://github.com/llvm/llvm-project/commit/d813116c9deaa960ddcce5b4b161ea589d6e9a34 DIFF: https://github.com/llvm/llvm-project/commit/d813116c9deaa960ddcce5b4b161ea589d6e9a34.diff LOG: [NFC][Lexer] Remove getLangOpts function from Lexer Given that there is only one external user of Lexer::getLangOpts we can remove getter entirely without much pain. Differential Revision: https://reviews.llvm.org/D120404 Added: Modified: clang/include/clang/Lex/Lexer.h clang/lib/Lex/Lexer.cpp clang/lib/Lex/ModuleMap.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Lex/Lexer.h b/clang/include/clang/Lex/Lexer.h index e4dbb6b4af6f0..c64a5756ac419 100644 --- a/clang/include/clang/Lex/Lexer.h +++ b/clang/include/clang/Lex/Lexer.h @@ -183,10 +183,6 @@ class Lexer : public PreprocessorLexer { SourceLocation ExpansionLocEnd, unsigned TokLen, Preprocessor &PP); - /// getLangOpts - Return the language features currently enabled. - /// NOTE: this lexer modifies features as a file is parsed! - const LangOptions &getLangOpts() const { return LangOpts; } - /// getFileLoc - Return the File Location for the file we are lexing out of. /// The physical location encodes the location where the characters come from, /// the virtual location encodes where we should *claim* the characters came diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index 63ad43842adde..6e8072fb1b2d9 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -1194,11 +1194,11 @@ static char GetTrigraphCharForLetter(char Letter) { /// prefixed with ??, emit a trigraph warning. If trigraphs are enabled, /// return the result character. Finally, emit a warning about trigraph use /// whether trigraphs are enabled or not. -static char DecodeTrigraphChar(const char *CP, Lexer *L) { +static char DecodeTrigraphChar(const char *CP, Lexer *L, bool Trigraphs) { char Res = GetTrigraphCharForLetter(*CP); if (!Res || !L) return Res; - if (!L->getLangOpts().Trigraphs) { + if (!Trigraphs) { if (!L->isLexingRawMode()) L->Diag(CP-2, diag::trigraph_ignored); return 0; @@ -1372,7 +1372,8 @@ char Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, if (Ptr[0] == '?' && Ptr[1] == '?') { // If this is actually a legal trigraph (not something like "??x"), emit // a trigraph warning. If so, and if trigraphs are enabled, return it. - if (char C = DecodeTrigraphChar(Ptr+2, Tok ? this : nullptr)) { + if (char C = DecodeTrigraphChar(Ptr + 2, Tok ? this : nullptr, + LangOpts.Trigraphs)) { // Remember that this token needs to be cleaned. if (Tok) Tok->setFlag(Token::NeedsCleaning); @@ -2543,8 +2544,8 @@ bool Lexer::SaveLineComment(Token &Result, const char *CurPtr) { /// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline /// character (either \\n or \\r) is part of an escaped newline sequence. Issue /// a diagnostic if so. We know that the newline is inside of a block comment. -static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, - Lexer *L) { +static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, + bool Trigraphs) { assert(CurPtr[0] == '\n' || CurPtr[0] == '\r'); // Position of the first trigraph in the ending sequence. @@ -2595,7 +2596,7 @@ static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, if (TrigraphPos) { // If no trigraphs are enabled, warn that we ignored this trigraph and // ignore this * character. - if (!L->getLangOpts().Trigraphs) { + if (!Trigraphs) { if (!L->isLexingRawMode()) L->Diag(TrigraphPos, diag::trigraph_ignored_block_comment); return false; @@ -2725,7 +2726,8 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr, break; if ((CurPtr[-2] == '\n' || CurPtr[-2] == '\r')) { - if (isEndOfBlockCommentWithEscapedNewLine(CurPtr-2, this)) { + if (isEndOfBlockCommentWithEscapedNewLine(CurPtr - 2, this, + LangOpts.Trigraphs)) { // We found the final */, though it had an escaped newline between the // * and /. We're done! break; diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 824b2bb192909..a5eca402c43bf 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1625,7 +1625,7 @@ SourceLocation ModuleMapParser::consumeToken() { SpellingBuffer.resize(LToken.getLength() + 1); const char *Start = SpellingBuffer.data(); unsigned Length = - Lexer::getSpelling(LToken, Start, SourceMgr, L.getLangOpts()); + Lexer::getSpelling(LToken, Start, SourceMgr, Map.LangOpts); uint64_t Value; if (StringRef(Start, Length).getAsInteger(0, Value)) { Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits