summaryrefslogtreecommitdiffstats
path: root/clang/Lex/HeaderMap.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-12-17 18:44:09 +0000
committerChris Lattner <sabre@nondot.org>2007-12-17 18:44:09 +0000
commit79764a6beec75769109b7baa176aed12b30947d2 (patch)
tree58ee87f8d8a1c1dd58dc3509d399a7d05655572f /clang/Lex/HeaderMap.cpp
parentea63b1575c80a4c426b114e03fd5f124360a141d (diff)
downloadbcm5719-llvm-79764a6beec75769109b7baa176aed12b30947d2.tar.gz
bcm5719-llvm-79764a6beec75769109b7baa176aed12b30947d2.zip
Finish hooking up the scaffolding for headermaps. They can now do everything
except resolve lookups. llvm-svn: 45111
Diffstat (limited to 'clang/Lex/HeaderMap.cpp')
-rw-r--r--clang/Lex/HeaderMap.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/clang/Lex/HeaderMap.cpp b/clang/Lex/HeaderMap.cpp
index ebcbc17f80f..c698aba0663 100644
--- a/clang/Lex/HeaderMap.cpp
+++ b/clang/Lex/HeaderMap.cpp
@@ -44,11 +44,11 @@ const HeaderMap *HeaderMap::Create(const FileEntry *FE) {
unsigned FileSize = FE->getSize();
if (FileSize <= sizeof(HMapHeader)) return 0;
- llvm::scoped_ptr<const llvm::MemoryBuffer> File(
+ llvm::scoped_ptr<const llvm::MemoryBuffer> FileBuffer(
llvm::MemoryBuffer::getFile(FE->getName(), strlen(FE->getName()), 0,
FE->getSize()));
- if (File == 0) return 0; // Unreadable file?
- const char *FileStart = File->getBufferStart();
+ if (FileBuffer == 0) return 0; // Unreadable file?
+ const char *FileStart = FileBuffer->getBufferStart();
// We know the file is at least as big as the header, check it now.
const HMapHeader *Header = reinterpret_cast<const HMapHeader*>(FileStart);
@@ -65,8 +65,21 @@ const HeaderMap *HeaderMap::Create(const FileEntry *FE) {
NeedsByteSwap = true; // Mixed endianness headermap.
else
return 0; // Not a header map.
-
- return 0;
+
+ // Okay, everything looks good, create the header map.
+ HeaderMap *NewHM = new HeaderMap(FileBuffer.get(), NeedsByteSwap);
+ FileBuffer.reset(); // Don't deallocate the buffer on return.
+ return NewHM;
+}
+
+HeaderMap::~HeaderMap() {
+ delete FileBuffer;
+}
+
+
+/// getFileName - Return the filename of the headermap.
+const char *HeaderMap::getFileName() const {
+ return FileBuffer->getBufferIdentifier();
}
/// LookupFile - Check to see if the specified relative filename is located in
OpenPOWER on IntegriCloud