about summary refs log tree commit diff
path: root/src/llvmext/Object.cpp
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-03-14 18:12:16 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-03-14 18:13:04 -0700
commit3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd (patch)
treeea5cfbdc40cc775070ee9d4180c25e84f37e7904 /src/llvmext/Object.cpp
parent316158df8e423f6c123cf2d3349e27c2794b147b (diff)
downloadrust-3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd.tar.gz
rust-3bbd741c2e0e9c17bb1a6406be37e6991b6d14cd.zip
llvmext: Make the Object bindings actually work
Diffstat (limited to 'src/llvmext/Object.cpp')
-rw-r--r--src/llvmext/Object.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/llvmext/Object.cpp b/src/llvmext/Object.cpp
index f390870fb33..603e72b9036 100644
--- a/src/llvmext/Object.cpp
+++ b/src/llvmext/Object.cpp
@@ -18,9 +18,8 @@
 using namespace llvm;
 using namespace object;
 
-LLVMObjectFileRef LLVMCreateObjectFile(const char *ObjectPath) {
-  StringRef SR(ObjectPath);
-  return wrap(ObjectFile::createObjectFile(SR));
+LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf) {
+  return wrap(ObjectFile::createObjectFile(unwrap(MemBuf)));
 }
 
 void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile) {
@@ -36,9 +35,14 @@ void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI) {
   delete unwrap(SI);
 }
 
+bool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+                                LLVMSectionIteratorRef SI) {
+  return *unwrap(SI) == unwrap(ObjectFile)->end_sections();
+}
+
 void LLVMMoveToNextSection(LLVMSectionIteratorRef SI) {
-  ObjectFile::section_iterator UnwrappedSI = *unwrap(SI);
-  ++UnwrappedSI;
+  // We can't use unwrap() here because the argument to ++ must be an lvalue.
+  ++*reinterpret_cast<ObjectFile::section_iterator*>(SI);
 }
 
 const char *LLVMGetSectionName(LLVMSectionIteratorRef SI) {