diff options
author | Chris Lattner <sabre@nondot.org> | 2007-12-17 18:44:09 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-12-17 18:44:09 +0000 |
commit | 98751314c4ba596860b574c3d3551030f01ff7d8 (patch) | |
tree | bad3c7f5db0e10923e0d6defdbb7ef934df37328 /Lex/HeaderMap.cpp | |
parent | 9796915de81f6c8bf20601f85fbc91de39771616 (diff) |
Finish hooking up the scaffolding for headermaps. They can now do everything
except resolve lookups.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45111 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Lex/HeaderMap.cpp')
-rw-r--r-- | Lex/HeaderMap.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/Lex/HeaderMap.cpp b/Lex/HeaderMap.cpp index ebcbc17f80..c698aba066 100644 --- a/Lex/HeaderMap.cpp +++ b/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 |