clang: lib/Basic/SourceMgrAdapter.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
16
17using namespace clang;
18
19void SourceMgrAdapter::handleDiag(const llvm::SMDiagnostic &Diag,
20 void *Context) {
22}
23
26 unsigned ErrorDiagID, unsigned WarningDiagID,
27 unsigned NoteDiagID,
29 : SrcMgr(SM), Diagnostics(Diagnostics), ErrorDiagID(ErrorDiagID),
30 WarningDiagID(WarningDiagID), NoteDiagID(NoteDiagID),
31 DefaultFile(DefaultFile) {}
32
34
36 llvm::SMLoc Loc) {
37
40
41
42 unsigned BufferID = LLVMSrcMgr.FindBufferContainingLoc(Loc);
43 if (!BufferID)
45
46
47 auto Buffer = LLVMSrcMgr.getMemoryBuffer(BufferID);
48 auto KnownBuffer = FileIDMapping.find(std::make_pair(&LLVMSrcMgr, BufferID));
49 if (KnownBuffer == FileIDMapping.end()) {
51 if (DefaultFile) {
52
54
55
56 DefaultFile = std::nullopt;
57 } else {
58
59 StringRef bufferName = Buffer->getBufferIdentifier();
60 auto bufferCopy = std::unique_ptrllvm::MemoryBuffer(
61 llvm::MemoryBuffer::getMemBufferCopy(Buffer->getBuffer(),
62 bufferName));
63
64
66 }
67
68
69 KnownBuffer = FileIDMapping
70 .insert(std::make_pair(
71 std::make_pair(&LLVMSrcMgr, BufferID), FileID))
72 .first;
73 }
74
75
76 unsigned Offset = Loc.getPointer() - Buffer->getBufferStart();
79}
80
82 llvm::SMRange Range) {
85
89}
90
91void SourceMgrAdapter::handleDiag(const llvm::SMDiagnostic &Diag) {
92
94 if (auto *LLVMSrcMgr = Diag.getSourceMgr())
96
97
98 StringRef Message = Diag.getMessage();
99
100
101 unsigned DiagID;
102 switch (Diag.getKind()) {
103 case llvm::SourceMgr::DK_Error:
104 DiagID = ErrorDiagID;
105 break;
106
107 case llvm::SourceMgr::DK_Warning:
108 DiagID = WarningDiagID;
109 break;
110
111 case llvm::SourceMgr::DK_Remark:
112 llvm_unreachable("remarks not implemented");
113
114 case llvm::SourceMgr::DK_Note:
115 DiagID = NoteDiagID;
116 break;
117 }
118
119
121
122 if (auto *LLVMSrcMgr = Diag.getSourceMgr()) {
123
125 for (auto Range : Diag.getRanges()) {
128 }
129
130
131 for (const llvm::SMFixIt &FixIt : Diag.getFixIts()) {
134 }
135 }
136}
Defines the Diagnostic-related interfaces.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
Represents a character-granular source range.
A little helper class used to produce diagnostics.
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)
Create a code modification hint that replaces the given source range with the given code string.
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
SourceLocation getLocWithOffset(IntTy Offset) const
Return a source location with the specified offset from this SourceLocation.
This class handles loading and caching of source files into memory.
FileID createFileID(FileEntryRef SourceFile, SourceLocation IncludePos, SrcMgr::CharacteristicKind FileCharacter, int LoadedID=0, SourceLocation::UIntTy LoadedOffset=0)
Create a new FileID that represents the specified file being #included from the specified IncludePosi...
FileID getOrCreateFileID(FileEntryRef SourceFile, SrcMgr::CharacteristicKind FileCharacter)
Get the FileID for SourceFile if it exists.
SourceLocation getLocForStartOfFile(FileID FID) const
Return the source location corresponding to the first byte of the specified file.
An adapter that can be used to translate diagnostics from one or more llvm::SourceMgr instances to a ...
SourceLocation mapLocation(const llvm::SourceMgr &LLVMSrcMgr, llvm::SMLoc Loc)
Map a source location in the given LLVM source manager to its corresponding location in the Clang sou...
SourceRange mapRange(const llvm::SourceMgr &LLVMSrcMgr, llvm::SMRange Range)
Map a source range in the given LLVM source manager to its corresponding range in the Clang source ma...
SourceMgrAdapter(SourceManager &SM, DiagnosticsEngine &Diagnostics, unsigned ErrorDiagID, unsigned WarningDiagID, unsigned NoteDiagID, OptionalFileEntryRef DefaultFile=std::nullopt)
Create a new SourceMgr adaptor that maps to the given source manager and diagnostics engine.
A trivial tuple used to represent a source range.
The JSON file list parser is used to communicate input to InstallAPI.