Home | History | Annotate | Line # | Download | only in Lex
      1 //===- PreprocessorLexer.cpp - C Language Family Lexer --------------------===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 //
      9 //  This file implements the PreprocessorLexer and Token interfaces.
     10 //
     11 //===----------------------------------------------------------------------===//
     12 
     13 #include "clang/Lex/PreprocessorLexer.h"
     14 #include "clang/Basic/SourceManager.h"
     15 #include "clang/Lex/LexDiagnostic.h"
     16 #include "clang/Lex/Preprocessor.h"
     17 #include "clang/Lex/Token.h"
     18 #include <cassert>
     19 
     20 using namespace clang;
     21 
     22 void PreprocessorLexer::anchor() {}
     23 
     24 PreprocessorLexer::PreprocessorLexer(Preprocessor *pp, FileID fid)
     25     : PP(pp), FID(fid) {
     26   if (pp)
     27     InitialNumSLocEntries = pp->getSourceManager().local_sloc_entry_size();
     28 }
     29 
     30 /// After the preprocessor has parsed a \#include, lex and
     31 /// (potentially) macro expand the filename.
     32 void PreprocessorLexer::LexIncludeFilename(Token &FilenameTok) {
     33   assert(ParsingFilename == false && "reentered LexIncludeFilename");
     34 
     35   // We are now parsing a filename!
     36   ParsingFilename = true;
     37 
     38   // Lex the filename.
     39   if (LexingRawMode)
     40     IndirectLex(FilenameTok);
     41   else
     42     PP->Lex(FilenameTok);
     43 
     44   // We should have obtained the filename now.
     45   ParsingFilename = false;
     46 }
     47 
     48 /// getFileEntry - Return the FileEntry corresponding to this FileID.  Like
     49 /// getFileID(), this only works for lexers with attached preprocessors.
     50 const FileEntry *PreprocessorLexer::getFileEntry() const {
     51   return PP->getSourceManager().getFileEntryForID(getFileID());
     52 }
     53