diff options
Diffstat (limited to 'lib/Support/SourceMgr.cpp')
| -rw-r--r-- | lib/Support/SourceMgr.cpp | 31 | 
1 files changed, 16 insertions, 15 deletions
| diff --git a/lib/Support/SourceMgr.cpp b/lib/Support/SourceMgr.cpp index da5681c5bc09..ef099163c221 100644 --- a/lib/Support/SourceMgr.cpp +++ b/lib/Support/SourceMgr.cpp @@ -13,9 +13,12 @@  //  //===----------------------------------------------------------------------===// +#include "llvm/ADT/Twine.h"  #include "llvm/Support/SourceMgr.h"  #include "llvm/Support/MemoryBuffer.h" +#include "llvm/ADT/OwningPtr.h"  #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/system_error.h"  using namespace llvm;  namespace { @@ -47,18 +50,18 @@ SourceMgr::~SourceMgr() {  /// ~0, otherwise it returns the buffer ID of the stacked file.  unsigned SourceMgr::AddIncludeFile(const std::string &Filename,                                     SMLoc IncludeLoc) { - -  MemoryBuffer *NewBuf = MemoryBuffer::getFile(Filename.c_str()); +  OwningPtr<MemoryBuffer> NewBuf; +  MemoryBuffer::getFile(Filename.c_str(), NewBuf);    // If the file didn't exist directly, see if it's in an include path.    for (unsigned i = 0, e = IncludeDirectories.size(); i != e && !NewBuf; ++i) {      std::string IncFile = IncludeDirectories[i] + "/" + Filename; -    NewBuf = MemoryBuffer::getFile(IncFile.c_str()); +    MemoryBuffer::getFile(IncFile.c_str(), NewBuf);    }    if (NewBuf == 0) return ~0U; -  return AddNewSourceBuffer(NewBuf, IncludeLoc); +  return AddNewSourceBuffer(NewBuf.take(), IncludeLoc);  } @@ -135,7 +138,7 @@ void SourceMgr::PrintIncludeStack(SMLoc IncludeLoc, raw_ostream &OS) const {  ///  /// @param Type - If non-null, the kind of message (e.g., "error") which is  /// prefixed to the message. -SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, const std::string &Msg, +SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, const Twine &Msg,                                     const char *Type, bool ShowLine) const {    // First thing to do: find the current buffer containing the specified @@ -162,27 +165,25 @@ SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, const std::string &Msg,    }    std::string PrintedMsg; -  if (Type) { -    PrintedMsg = Type; -    PrintedMsg += ": "; -  } -  PrintedMsg += Msg; +  raw_string_ostream OS(PrintedMsg); +  if (Type) +    OS << Type << ": "; +  OS << Msg;    return SMDiagnostic(*this, Loc,                        CurMB->getBufferIdentifier(), FindLineNumber(Loc, CurBuf), -                      Loc.getPointer()-LineStart, PrintedMsg, +                      Loc.getPointer()-LineStart, OS.str(),                        LineStr, ShowLine);  } -void SourceMgr::PrintMessage(SMLoc Loc, const std::string &Msg, +void SourceMgr::PrintMessage(SMLoc Loc, const Twine &Msg,                               const char *Type, bool ShowLine) const {    // Report the message with the diagnostic handler if present.    if (DiagHandler) { -    DiagHandler(GetMessage(Loc, Msg, Type, ShowLine), -                DiagContext, DiagLocCookie); +    DiagHandler(GetMessage(Loc, Msg, Type, ShowLine), DiagContext);      return;    } -   +    raw_ostream &OS = errs();    int CurBuf = FindBufferContainingLoc(Loc); | 
