summaryrefslogtreecommitdiff
path: root/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-03-16 00:06:06 +0000
committerDouglas Gregor <dgregor@apple.com>2010-03-16 00:06:06 +0000
commitf715ca12bfc9fddfde75f98a197424434428b821 (patch)
treebd19f3ce3d9a7850942f25d25c03633954e91faa /lib/Basic/SourceManager.cpp
parentf9b0a58a103784495309543dce4469e44861b4cc (diff)
downloadclang-f715ca12bfc9fddfde75f98a197424434428b821.tar.gz
Give SourceManager a Diagnostic object with which to report errors,
and start simplifying the interfaces in SourceManager that can fail. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98594 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/SourceManager.cpp')
-rw-r--r--lib/Basic/SourceManager.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp
index b69ba53f7b..ac2fe3d69e 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/lib/Basic/SourceManager.cpp
@@ -21,6 +21,7 @@
#include "llvm/System/Path.h"
#include <algorithm>
#include <string>
+#include <cstring>
#include <cstdio>
using namespace clang;
@@ -532,19 +533,17 @@ bool SourceManager::overrideFileContents(const FileEntry *SourceFile,
}
std::pair<const char*, const char*>
-SourceManager::getBufferData(FileID FID, llvm::StringRef &FileName,
- std::string &Error) const {
- const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(FileName, Error);
- if (!Error.empty())
- return std::make_pair((const char *)0, (const char *)0);
- return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd());
-}
-
-std::pair<const char*, const char*>
-SourceManager::getBufferData(FileID FID, Diagnostic &Diags) const {
- const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diags);
- if (!Buf)
- return std::make_pair((const char *)0, (const char *)0);
+SourceManager::getBufferData(FileID FID, bool *Invalid) const {
+ if (Invalid)
+ *Invalid = false;
+
+ const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diag);
+ if (!Buf) {
+ if (*Invalid)
+ *Invalid = true;
+ const char *FakeText = "";
+ return std::make_pair(FakeText, FakeText + strlen(FakeText));
+ }
return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd());
}