LLVM 19.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::SourceMgr Class Reference

This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling. More...

#include "llvm/Support/SourceMgr.h"

Public Types

enum  DiagKind { DK_Error , DK_Warning , DK_Remark , DK_Note }
 
using DiagHandlerTy = void(*)(const SMDiagnostic &, void *Context)
 Clients that want to handle their own diagnostics in a custom way can register a function pointer+context as a diagnostic handler.
 

Public Member Functions

 SourceMgr ()=default
 
 SourceMgr (const SourceMgr &)=delete
 
SourceMgroperator= (const SourceMgr &)=delete
 
 SourceMgr (SourceMgr &&)=default
 
SourceMgroperator= (SourceMgr &&)=default
 
 ~SourceMgr ()=default
 
ArrayRef< std::string > getIncludeDirs () const
 Return the include directories of this source manager.
 
void setIncludeDirs (const std::vector< std::string > &Dirs)
 
void setDiagHandler (DiagHandlerTy DH, void *Ctx=nullptr)
 Specify a diagnostic handler to be invoked every time PrintMessage is called.
 
DiagHandlerTy getDiagHandler () const
 
void * getDiagContext () const
 
const SrcBuffer & getBufferInfo (unsigned i) const
 
const MemoryBuffergetMemoryBuffer (unsigned i) const
 
unsigned getNumBuffers () const
 
unsigned getMainFileID () const
 
SMLoc getParentIncludeLoc (unsigned i) const
 
unsigned AddNewSourceBuffer (std::unique_ptr< MemoryBuffer > F, SMLoc IncludeLoc)
 Add a new source buffer to this source manager.
 
void takeSourceBuffersFrom (SourceMgr &SrcMgr, SMLoc MainBufferIncludeLoc=SMLoc())
 Takes the source buffers from the given source manager and append them to the current manager.
 
unsigned AddIncludeFile (const std::string &Filename, SMLoc IncludeLoc, std::string &IncludedFile)
 Search for a file with the specified name in the current directory or in one of the IncludeDirs.
 
ErrorOr< std::unique_ptr< MemoryBuffer > > OpenIncludeFile (const std::string &Filename, std::string &IncludedFile)
 Search for a file with the specified name in the current directory or in one of the IncludeDirs, and try to open it without adding to the SourceMgr.
 
unsigned FindBufferContainingLoc (SMLoc Loc) const
 Return the ID of the buffer containing the specified location.
 
unsigned FindLineNumber (SMLoc Loc, unsigned BufferID=0) const
 Find the line number for the specified location in the specified file.
 
std::pair< unsigned, unsignedgetLineAndColumn (SMLoc Loc, unsigned BufferID=0) const
 Find the line and column number for the specified location in the specified file.
 
std::string getFormattedLocationNoOffset (SMLoc Loc, bool IncludePath=false) const
 Get a string with the SMLoc filename and line number formatted in the standard style.
 
SMLoc FindLocForLineAndColumn (unsigned BufferID, unsigned LineNo, unsigned ColNo)
 Given a line and column number in a mapped buffer, turn it into an SMLoc.
 
void PrintMessage (raw_ostream &OS, SMLoc Loc, DiagKind Kind, const Twine &Msg, ArrayRef< SMRange > Ranges={}, ArrayRef< SMFixIt > FixIts={}, bool ShowColors=true) const
 Emit a message about the specified location with the specified string.
 
void PrintMessage (SMLoc Loc, DiagKind Kind, const Twine &Msg, ArrayRef< SMRange > Ranges={}, ArrayRef< SMFixIt > FixIts={}, bool ShowColors=true) const
 Emits a diagnostic to llvm::errs().
 
void PrintMessage (raw_ostream &OS, const SMDiagnostic &Diagnostic, bool ShowColors=true) const
 Emits a manually-constructed diagnostic to the given output stream.
 
SMDiagnostic GetMessage (SMLoc Loc, DiagKind Kind, const Twine &Msg, ArrayRef< SMRange > Ranges={}, ArrayRef< SMFixIt > FixIts={}) const
 Return an SMDiagnostic at the specified location with the specified string.
 
void PrintIncludeStack (SMLoc IncludeLoc, raw_ostream &OS) const
 Prints the names of included files and the line of the file they were included from.
 

Detailed Description

This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling.

Definition at line 31 of file SourceMgr.h.

Member Typedef Documentation

◆ DiagHandlerTy

using llvm::SourceMgr::DiagHandlerTy = void (*)(const SMDiagnostic &, void *Context)

Clients that want to handle their own diagnostics in a custom way can register a function pointer+context as a diagnostic handler.

It gets called each time PrintMessage is invoked.

Definition at line 43 of file SourceMgr.h.

Member Enumeration Documentation

◆ DiagKind

Enumerator
DK_Error 
DK_Warning 
DK_Remark 
DK_Note 

Definition at line 33 of file SourceMgr.h.

Constructor & Destructor Documentation

◆ SourceMgr() [1/3]

llvm::SourceMgr::SourceMgr ( )
default

◆ SourceMgr() [2/3]

llvm::SourceMgr::SourceMgr ( const SourceMgr )
delete

◆ SourceMgr() [3/3]

llvm::SourceMgr::SourceMgr ( SourceMgr &&  )
default

◆ ~SourceMgr()

llvm::SourceMgr::~SourceMgr ( )
default

Member Function Documentation

◆ AddIncludeFile()

unsigned SourceMgr::AddIncludeFile ( const std::string &  Filename,
SMLoc  IncludeLoc,
std::string &  IncludedFile 
)

Search for a file with the specified name in the current directory or in one of the IncludeDirs.

If no file is found, this returns 0, otherwise it returns the buffer ID of the stacked file. The full path to the included file can be found in IncludedFile.

Definition at line 41 of file SourceMgr.cpp.

References AddNewSourceBuffer(), and OpenIncludeFile().

◆ AddNewSourceBuffer()

unsigned llvm::SourceMgr::AddNewSourceBuffer ( std::unique_ptr< MemoryBuffer F,
SMLoc  IncludeLoc 
)
inline

◆ FindBufferContainingLoc()

unsigned SourceMgr::FindBufferContainingLoc ( SMLoc  Loc) const

Return the ID of the buffer containing the specified location.

0 is returned if the buffer is not found.

Definition at line 73 of file SourceMgr.cpp.

References llvm::SMLoc::getPointer().

Referenced by getFormattedLocationNoOffset(), getLineAndColumn(), getLocCookie(), GetMessage(), llvm::MCGenDwarfLabelEntry::Make(), PrintIncludeStack(), and PrintMessage().

◆ FindLineNumber()

unsigned llvm::SourceMgr::FindLineNumber ( SMLoc  Loc,
unsigned  BufferID = 0 
) const
inline

Find the line number for the specified location in the specified file.

This is not a fast method.

Definition at line 196 of file SourceMgr.h.

References getLineAndColumn().

Referenced by getFormattedLocationNoOffset(), llvm::MCGenDwarfLabelEntry::Make(), and PrintIncludeStack().

◆ FindLocForLineAndColumn()

SMLoc SourceMgr::FindLocForLineAndColumn ( unsigned  BufferID,
unsigned  LineNo,
unsigned  ColNo 
)

Given a line and column number in a mapped buffer, turn it into an SMLoc.

This will return a null SMLoc if the line/column location is invalid.

Definition at line 234 of file SourceMgr.cpp.

References getBufferInfo(), llvm::SMLoc::getFromPointer(), llvm::StringRef::npos, and Ptr.

◆ getBufferInfo()

const SrcBuffer & llvm::SourceMgr::getBufferInfo ( unsigned  i) const
inline

◆ getDiagContext()

void * llvm::SourceMgr::getDiagContext ( ) const
inline

◆ getDiagHandler()

DiagHandlerTy llvm::SourceMgr::getDiagHandler ( ) const
inline

◆ getFormattedLocationNoOffset()

std::string SourceMgr::getFormattedLocationNoOffset ( SMLoc  Loc,
bool  IncludePath = false 
) const

Get a string with the SMLoc filename and line number formatted in the standard style.

Get a string with the source location formatted in the standard style, but without the line offset.

If IncludePath is true, the path is included. If false, only the file name and extension are included.

Definition at line 216 of file SourceMgr.cpp.

References assert(), FindBufferContainingLoc(), FindLineNumber(), getBufferInfo(), and I.

◆ getIncludeDirs()

ArrayRef< std::string > llvm::SourceMgr::getIncludeDirs ( ) const
inline

Return the include directories of this source manager.

Definition at line 104 of file SourceMgr.h.

Referenced by llvm::TableGenParseFile().

◆ getLineAndColumn()

std::pair< unsigned, unsigned > SourceMgr::getLineAndColumn ( SMLoc  Loc,
unsigned  BufferID = 0 
) const

Find the line and column number for the specified location in the specified file.

This is not a fast method.

Definition at line 192 of file SourceMgr.cpp.

References assert(), llvm::StringRef::find_last_of(), FindBufferContainingLoc(), getBufferInfo(), llvm::SMLoc::getPointer(), llvm::StringRef::npos, and Ptr.

Referenced by llvm::FileCheckDiag::FileCheckDiag(), FindLineNumber(), and GetMessage().

◆ getMainFileID()

unsigned llvm::SourceMgr::getMainFileID ( ) const
inline

◆ getMemoryBuffer()

const MemoryBuffer * llvm::SourceMgr::getMemoryBuffer ( unsigned  i) const
inline

◆ GetMessage()

SMDiagnostic SourceMgr::GetMessage ( SMLoc  Loc,
SourceMgr::DiagKind  Kind,
const Twine Msg,
ArrayRef< SMRange Ranges = {},
ArrayRef< SMFixIt FixIts = {} 
) const

◆ getNumBuffers()

unsigned llvm::SourceMgr::getNumBuffers ( ) const
inline

Definition at line 130 of file SourceMgr.h.

Referenced by getMainFileID(), llvm::MCContext::MCContext(), and takeSourceBuffersFrom().

◆ getParentIncludeLoc()

SMLoc llvm::SourceMgr::getParentIncludeLoc ( unsigned  i) const
inline

Definition at line 137 of file SourceMgr.h.

References assert().

◆ OpenIncludeFile()

ErrorOr< std::unique_ptr< MemoryBuffer > > SourceMgr::OpenIncludeFile ( const std::string &  Filename,
std::string &  IncludedFile 
)

Search for a file with the specified name in the current directory or in one of the IncludeDirs, and try to open it without adding to the SourceMgr.

If the opened file is intended to be added to the source manager, prefer AddIncludeFile instead.

If no file is found, this returns an Error, otherwise it returns the buffer of the stacked file. The full path to the included file can be found in IncludedFile.

Definition at line 53 of file SourceMgr.cpp.

References llvm::sys::path::append(), and llvm::MemoryBuffer::getFile().

Referenced by AddIncludeFile().

◆ operator=() [1/2]

SourceMgr & llvm::SourceMgr::operator= ( const SourceMgr )
delete

◆ operator=() [2/2]

SourceMgr & llvm::SourceMgr::operator= ( SourceMgr &&  )
default

◆ PrintIncludeStack()

void SourceMgr::PrintIncludeStack ( SMLoc  IncludeLoc,
raw_ostream OS 
) const

Prints the names of included files and the line of the file they were included from.

A diagnostic handler can use this before printing its custom formatted message.

Parameters
IncludeLocThe location of the include.
OSthe raw_ostream to print on.

Definition at line 261 of file SourceMgr.cpp.

References assert(), FindBufferContainingLoc(), FindLineNumber(), getBufferInfo(), OS, and PrintIncludeStack().

Referenced by PrintIncludeStack(), and PrintMessage().

◆ PrintMessage() [1/3]

void SourceMgr::PrintMessage ( raw_ostream OS,
const SMDiagnostic Diagnostic,
bool  ShowColors = true 
) const

Emits a manually-constructed diagnostic to the given output stream.

Parameters
ShowColorsDisplay colored messages if output is a terminal and the default error handler is used.

Definition at line 335 of file SourceMgr.cpp.

References assert(), FindBufferContainingLoc(), getBufferInfo(), llvm::SMDiagnostic::getLoc(), llvm::SMLoc::isValid(), OS, llvm::SMDiagnostic::print(), and PrintIncludeStack().

◆ PrintMessage() [2/3]

void SourceMgr::PrintMessage ( raw_ostream OS,
SMLoc  Loc,
SourceMgr::DiagKind  Kind,
const Twine Msg,
ArrayRef< SMRange Ranges = {},
ArrayRef< SMFixIt FixIts = {},
bool  ShowColors = true 
) const

◆ PrintMessage() [3/3]

void SourceMgr::PrintMessage ( SMLoc  Loc,
SourceMgr::DiagKind  Kind,
const Twine Msg,
ArrayRef< SMRange Ranges = {},
ArrayRef< SMFixIt FixIts = {},
bool  ShowColors = true 
) const

Emits a diagnostic to llvm::errs().

Definition at line 359 of file SourceMgr.cpp.

References llvm::errs(), and PrintMessage().

◆ setDiagHandler()

void llvm::SourceMgr::setDiagHandler ( DiagHandlerTy  DH,
void *  Ctx = nullptr 
)
inline

Specify a diagnostic handler to be invoked every time PrintMessage is called.

Ctx is passed into the handler when it is invoked.

Definition at line 112 of file SourceMgr.h.

Referenced by llvm::vfs::RedirectingFileSystem::create(), setupSM(), llvm::TableGenParseFile(), and llvm::remarks::YAMLParseError::YAMLParseError().

◆ setIncludeDirs()

void llvm::SourceMgr::setIncludeDirs ( const std::vector< std::string > &  Dirs)
inline

Definition at line 106 of file SourceMgr.h.

Referenced by llvm::TableGenMain(), and llvm::TableGenParseFile().

◆ takeSourceBuffersFrom()

void llvm::SourceMgr::takeSourceBuffersFrom ( SourceMgr SrcMgr,
SMLoc  MainBufferIncludeLoc = SMLoc() 
)
inline

Takes the source buffers from the given source manager and append them to the current manager.

MainBufferIncludeLoc is an optional include location to attach to the main buffer of SrcMgr after it gets moved to the current manager.

Definition at line 157 of file SourceMgr.h.

References getNumBuffers(), and llvm::SrcMgr.

Referenced by llvm::TableGenParseFile().


The documentation for this class was generated from the following files: