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.