-import std::{vec, str};
+import std::{vec, str, option};
import std::str::sbuf;
import llvm::{ModuleRef, ContextRef, TypeRef, TypeHandleRef, ValueRef,
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. */
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);