]> git.lizzy.rs Git - rust.git/commitdiff
llvm::mk_object_file should really return an option, since the underlying LLVM functi...
authorJoshua Wise <joshua@joshuawise.com>
Mon, 7 Nov 2011 02:29:16 +0000 (21:29 -0500)
committerMarijn Haverbeke <marijnh@gmail.com>
Mon, 7 Nov 2011 08:56:30 +0000 (09:56 +0100)
src/comp/lib/llvm.rs
src/comp/metadata/creader.rs

index 379926446474b5d9a74d3fdb92524cc614a0d05b..5baad8466f90b7267eb1118e9675478054e3f678 100644 (file)
@@ -1,4 +1,4 @@
-import std::{vec, str};
+import std::{vec, str, option};
 import std::str::sbuf;
 
 import llvm::{ModuleRef, ContextRef, TypeRef, TypeHandleRef, ValueRef,
@@ -1057,9 +1057,10 @@ fn mk_pass_manager() -> pass_manager {
 
 type object_file = {llof: ObjectFileRef, dtor: @object_file_res};
 
-fn mk_object_file(llmb: MemoryBufferRef) -> object_file {
+fn mk_object_file(llmb: MemoryBufferRef) -> option::t<object_file> {
     let llof = llvm::LLVMCreateObjectFile(llmb);
-    ret {llof: llof, dtor: @object_file_res(llof)};
+    if llof as int == 0 { ret option::none::<object_file>; }
+    ret option::some::<object_file>({llof: llof, dtor: @object_file_res(llof)});
 }
 
 /* Memory-managed interface to section iterators. */
index 5946b337b489fdc1a4717e950a5ac7766e85e55a..b283c4c3e6b7ccedf576699c8e4997f827318111 100644 (file)
@@ -175,7 +175,10 @@ fn get_metadata_section(sess: session::session,
         llvm::LLVMRustCreateMemoryBufferWithContentsOfFile(buf)
                                    });
     if mb as int == 0 { ret option::none::<@[u8]>; }
-    let of = mk_object_file(mb);
+    let of = alt mk_object_file(mb) {
+        option::some(of) { of }
+        _ { ret option::none::<@[u8]>; }
+    };
     let si = mk_section_iter(of.llof);
     while llvm::LLVMIsSectionIteratorAtEnd(of.llof, si.llsi) == False {
         let name_buf = llvm::LLVMGetSectionName(si.llsi);