15dc60fe5SEugene Zelenko //===- PreprocessorLexer.cpp - C Language Family Lexer --------------------===// 26c90efb9STed Kremenek // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66c90efb9STed Kremenek // 76c90efb9STed Kremenek //===----------------------------------------------------------------------===// 86c90efb9STed Kremenek // 96c90efb9STed Kremenek // This file implements the PreprocessorLexer and Token interfaces. 106c90efb9STed Kremenek // 116c90efb9STed Kremenek //===----------------------------------------------------------------------===// 126c90efb9STed Kremenek 136c90efb9STed Kremenek #include "clang/Lex/PreprocessorLexer.h" 146c90efb9STed Kremenek #include "clang/Basic/SourceManager.h" 153a02247dSChandler Carruth #include "clang/Lex/LexDiagnostic.h" 163a02247dSChandler Carruth #include "clang/Lex/Preprocessor.h" 175dc60fe5SEugene Zelenko #include "clang/Lex/Token.h" 185dc60fe5SEugene Zelenko #include <cassert> 195dc60fe5SEugene Zelenko 206c90efb9STed Kremenek using namespace clang; 216c90efb9STed Kremenek anchor()2268e081d6SDavid Blaikievoid PreprocessorLexer::anchor() {} 2368e081d6SDavid Blaikie PreprocessorLexer(Preprocessor * pp,FileID fid)2461ef3db2SArgyrios KyrtzidisPreprocessorLexer::PreprocessorLexer(Preprocessor *pp, FileID fid) 255dc60fe5SEugene Zelenko : PP(pp), FID(fid) { 2661ef3db2SArgyrios Kyrtzidis if (pp) 2761ef3db2SArgyrios Kyrtzidis InitialNumSLocEntries = pp->getSourceManager().local_sloc_entry_size(); 2861ef3db2SArgyrios Kyrtzidis } 2961ef3db2SArgyrios Kyrtzidis 309fc8faf9SAdrian Prantl /// After the preprocessor has parsed a \#include, lex and 316c90efb9STed Kremenek /// (potentially) macro expand the filename. LexIncludeFilename(Token & FilenameTok)326c90efb9STed Kremenekvoid PreprocessorLexer::LexIncludeFilename(Token &FilenameTok) { 33b9b05100SRichard Smith assert(ParsingFilename == false && "reentered LexIncludeFilename"); 346c90efb9STed Kremenek 356c90efb9STed Kremenek // We are now parsing a filename! 366c90efb9STed Kremenek ParsingFilename = true; 376c90efb9STed Kremenek 386c90efb9STed Kremenek // Lex the filename. 390834a4b9SEli Friedman if (LexingRawMode) 406c90efb9STed Kremenek IndirectLex(FilenameTok); 410834a4b9SEli Friedman else 420834a4b9SEli Friedman PP->Lex(FilenameTok); 436c90efb9STed Kremenek 446c90efb9STed Kremenek // We should have obtained the filename now. 456c90efb9STed Kremenek ParsingFilename = false; 466c90efb9STed Kremenek } 47d32480d3SChris Lattner 48d32480d3SChris Lattner /// getFileEntry - Return the FileEntry corresponding to this FileID. Like 49d32480d3SChris Lattner /// getFileID(), this only works for lexers with attached preprocessors. 50*0b09b5d4SJan Svoboda OptionalFileEntryRefDegradesToFileEntryPtr getFileEntry() const51*0b09b5d4SJan SvobodaPreprocessorLexer::getFileEntry() const { 52*0b09b5d4SJan Svoboda return PP->getSourceManager().getFileEntryRefForID(getFileID()); 53d32480d3SChris Lattner } 54