clang: lib/Basic/SourceLocation.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
17#include "llvm/ADT/DenseMapInfo.h"
18#include "llvm/ADT/FoldingSet.h"
19#include "llvm/Support/Compiler.h"
20#include "llvm/Support/raw_ostream.h"
21#include
22#include
23#include
24
25using namespace clang;
26
27
28
29
30
32 if (Loc.isValid()) {
33 Loc.print(OS, SM);
34 OS << ": ";
35 }
36 OS << Message << '\n';
37}
38
39
40
41
42
43static_assert(std::is_trivially_destructible_v,
44 "SourceLocation must be trivially destructible because it is "
45 "used in unions");
46
47static_assert(std::is_trivially_destructible_v,
48 "SourceRange must be trivially destructible because it is "
49 "used in unions");
50
52 return llvm::DenseMapInfo::getHashValue(ID);
53}
54
57 ID.AddInteger(X.ID);
58}
59
62 OS << "";
63 return;
64 }
65
68
70 OS << "";
71 return;
72 }
73
76 return;
77 }
78
79 SM.getExpansionLoc(*this).print(OS, SM);
80
81 OS << " <Spelling=";
82 SM.getSpellingLoc(*this).print(OS, SM);
83 OS << '>';
84}
85
86LLVM_DUMP_METHOD std::string
88 std::string S;
89 llvm::raw_string_ostream OS(S);
91 return S;
92}
93
96 llvm::errs() << '\n';
97}
98
101 llvm::errs() << '\n';
102}
103
107
109
111 OS << "";
113 }
114
120 OS << "line" << ':' << PLoc.getLine() << ':' << PLoc.getColumn();
121 } else {
122 OS << "col" << ':' << PLoc.getColumn();
123 }
124 return PLoc;
125 }
127
128 OS << " <Spelling=";
129 PrintedLoc = PrintDifference(OS, SM, SM.getSpellingLoc(Loc), PrintedLoc);
130 OS << '>';
131 return PrintedLoc;
132}
133
135
136 OS << '<';
138 if (B != E) {
139 OS << ", ";
141 }
142 OS << '>';
143}
144
145LLVM_DUMP_METHOD std::string
147 std::string S;
148 llvm::raw_string_ostream OS(S);
150 return S;
151}
152
153
154
155
156
159 return SrcMgr->getFileID(*this);
160}
161
164 return FullSourceLoc(SrcMgr->getExpansionLoc(*this), *SrcMgr);
165}
166
168 return SrcMgr->getDecomposedExpansionLoc(*this);
169}
170
173 return FullSourceLoc(SrcMgr->getSpellingLoc(*this), *SrcMgr);
174}
175
178 return FullSourceLoc(SrcMgr->getFileLoc(*this), *SrcMgr);
179}
180
184
185 return SrcMgr->getPresumedLoc(*this, UseLineDirectives);
186}
187
190 return SrcMgr->isMacroArgExpansion(*this, StartLoc);
191}
192
195 return FullSourceLoc(SrcMgr->getImmediateMacroCallerLoc(*this), *SrcMgr);
196}
197
200 return std::make_pair(FullSourceLoc(), StringRef());
201
202 std::pair<SourceLocation, StringRef> ImportLoc =
203 SrcMgr->getModuleImportLoc(*this);
204 return std::make_pair(FullSourceLoc(ImportLoc.first, *SrcMgr),
205 ImportLoc.second);
206}
207
210 return SrcMgr->getFileOffset(*this);
211}
212
217
222
225 return SrcMgr->getFileEntryForID(getFileID());
226}
227
230 return SrcMgr->getFileEntryRefForID(getFileID());
231}
232
235 return SrcMgr->getExpansionLineNumber(*this, Invalid);
236}
237
240 return SrcMgr->getExpansionColumnNumber(*this, Invalid);
241}
242
245 return SrcMgr->getSpellingLineNumber(*this, Invalid);
246}
247
250 return SrcMgr->getSpellingColumnNumber(*this, Invalid);
251}
252
255 return SrcMgr->isInSystemHeader(*this);
256}
257
260 return SrcMgr->isBeforeInTranslationUnit(*this, Loc);
261}
262
266
269 return SrcMgr->getCharacterData(*this, Invalid);
270}
271
274 return SrcMgr->getBufferData(SrcMgr->getFileID(*this), Invalid);
275}
276
278 return SrcMgr->getDecomposedLoc(*this);
279}
FormatToken * Previous
The previous token in the unwrapped line.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the PrettyStackTraceEntry class, which is used to make crashes give more contextual informati...
static PresumedLoc PrintDifference(raw_ostream &OS, const SourceManager &SM, SourceLocation Loc, PresumedLoc Previous)
Definition SourceLocation.cpp:104
Defines the clang::SourceLocation class and associated facilities.
Defines the SourceManager interface.
Cached information about one file (either on disk or in the virtual file system).
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
FullSourceLoc getFileLoc() const
Definition SourceLocation.cpp:176
unsigned getColumnNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:218
FileIDAndOffset getDecomposedExpansionLoc() const
Decompose the underlying SourceLocation into a raw (FileID + Offset) pair, after walking through all ...
Definition SourceLocation.cpp:167
FullSourceLoc getExpansionLoc() const
Definition SourceLocation.cpp:162
unsigned getLineNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:213
FullSourceLoc getSpellingLoc() const
Definition SourceLocation.cpp:171
std::pair< FullSourceLoc, StringRef > getModuleImportLoc() const
Definition SourceLocation.cpp:198
FileID getFileID() const
Definition SourceLocation.cpp:157
OptionalFileEntryRef getFileEntryRef() const
Definition SourceLocation.cpp:228
unsigned getSpellingLineNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:243
FullSourceLoc getImmediateMacroCallerLoc() const
Definition SourceLocation.cpp:193
const char * getCharacterData(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:267
unsigned getExpansionColumnNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:238
StringRef getBufferData(bool *Invalid=nullptr) const
Return a StringRef to the source buffer data for the specified FileID.
Definition SourceLocation.cpp:272
void dump() const
Prints information about this FullSourceLoc to stderr.
Definition SourceLocation.cpp:263
bool isInSystemHeader() const
Definition SourceLocation.cpp:253
const FileEntry * getFileEntry() const
Definition SourceLocation.cpp:223
unsigned getFileOffset() const
Definition SourceLocation.cpp:208
FullSourceLoc()=default
Creates a FullSourceLoc where isValid() returns false.
PresumedLoc getPresumedLoc(bool UseLineDirectives=true) const
Definition SourceLocation.cpp:181
FileIDAndOffset getDecomposedLoc() const
Decompose the specified location into a raw FileID + Offset pair.
Definition SourceLocation.cpp:277
bool isMacroArgExpansion(FullSourceLoc *StartLoc=nullptr) const
Definition SourceLocation.cpp:188
unsigned getExpansionLineNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:233
bool isBeforeInTranslationUnitThan(SourceLocation Loc) const
Determines the order of 2 source locations in the translation unit.
Definition SourceLocation.cpp:258
unsigned getSpellingColumnNumber(bool *Invalid=nullptr) const
Definition SourceLocation.cpp:248
Represents an unpacked "presumed" location which can be presented to the user.
unsigned getColumn() const
Return the presumed column number of this location.
const char * getFilename() const
Return the presumed filename of this location.
unsigned getLine() const
Return the presumed line number of this location.
bool isInvalid() const
Return true if this object is invalid or uninitialized.
void print(raw_ostream &OS) const override
Definition SourceLocation.cpp:31
Encodes a location in the source.
std::string printToString(const SourceManager &SM) const
Definition SourceLocation.cpp:87
void dump(const SourceManager &SM) const
Definition SourceLocation.cpp:94
bool isValid() const
Return true if this is a valid SourceLocation object.
void print(raw_ostream &OS, const SourceManager &SM) const
Definition SourceLocation.cpp:60
friend class SourceManager
unsigned getHashValue() const
Definition SourceLocation.cpp:51
This class handles loading and caching of source files into memory.
std::string printToString(const SourceManager &SM) const
Definition SourceLocation.cpp:146
void dump(const SourceManager &SM) const
Definition SourceLocation.cpp:99
void print(raw_ostream &OS, const SourceManager &SM) const
Definition SourceLocation.cpp:134
The JSON file list parser is used to communicate input to InstallAPI.
CustomizableOptional< FileEntryRef > OptionalFileEntryRef
std::pair< FileID, unsigned > FileIDAndOffset