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(Result&: FilenameTok); |
41 | else |
42 | PP->Lex(Result&: 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 | OptionalFileEntryRef PreprocessorLexer::getFileEntry() const { |
51 | return PP->getSourceManager().getFileEntryRefForID(FID: getFileID()); |
52 | } |
53 |