Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/Lex/PreprocessorLexer.cpp
35233 views
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
OptionalFileEntryRef PreprocessorLexer::getFileEntry() const {
51
return PP->getSourceManager().getFileEntryRefForID(getFileID());
52
}
53
54