mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
Return an ErrorOr<Binary *> from createBinary.
I did write a version returning ErrorOr<OwningPtr<Binary> >, but it is too cumbersome to use without std::move. I will keep the patch locally and submit when we switch to c++11. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199326 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -42,30 +42,26 @@ StringRef Binary::getFileName() const {
|
||||
return Data->getBufferIdentifier();
|
||||
}
|
||||
|
||||
error_code object::createBinary(MemoryBuffer *Source,
|
||||
OwningPtr<Binary> &Result) {
|
||||
ErrorOr<Binary *> object::createBinary(MemoryBuffer *Source) {
|
||||
OwningPtr<MemoryBuffer> scopedSource(Source);
|
||||
if (!Source)
|
||||
return make_error_code(errc::invalid_argument);
|
||||
sys::fs::file_magic type = sys::fs::identify_magic(Source->getBuffer());
|
||||
error_code ec;
|
||||
error_code EC;
|
||||
switch (type) {
|
||||
case sys::fs::file_magic::archive: {
|
||||
OwningPtr<Binary> ret(new Archive(scopedSource.take(), ec));
|
||||
if (ec) return ec;
|
||||
Result.swap(ret);
|
||||
return object_error::success;
|
||||
OwningPtr<Binary> Ret(new Archive(scopedSource.take(), EC));
|
||||
if (EC)
|
||||
return EC;
|
||||
return Ret.take();
|
||||
}
|
||||
case sys::fs::file_magic::elf_relocatable:
|
||||
case sys::fs::file_magic::elf_executable:
|
||||
case sys::fs::file_magic::elf_shared_object:
|
||||
case sys::fs::file_magic::elf_core: {
|
||||
OwningPtr<Binary> ret(
|
||||
ObjectFile::createELFObjectFile(scopedSource.take()));
|
||||
if (!ret)
|
||||
OwningPtr<Binary> Ret(
|
||||
ObjectFile::createELFObjectFile(scopedSource.take()));
|
||||
if (!Ret)
|
||||
return object_error::invalid_file_type;
|
||||
Result.swap(ret);
|
||||
return object_error::success;
|
||||
return Ret.take();
|
||||
}
|
||||
case sys::fs::file_magic::macho_object:
|
||||
case sys::fs::file_magic::macho_executable:
|
||||
@ -77,28 +73,26 @@ error_code object::createBinary(MemoryBuffer *Source,
|
||||
case sys::fs::file_magic::macho_bundle:
|
||||
case sys::fs::file_magic::macho_dynamically_linked_shared_lib_stub:
|
||||
case sys::fs::file_magic::macho_dsym_companion: {
|
||||
OwningPtr<Binary> ret(
|
||||
ObjectFile::createMachOObjectFile(scopedSource.take()));
|
||||
if (!ret)
|
||||
OwningPtr<Binary> Ret(
|
||||
ObjectFile::createMachOObjectFile(scopedSource.take()));
|
||||
if (!Ret)
|
||||
return object_error::invalid_file_type;
|
||||
Result.swap(ret);
|
||||
return object_error::success;
|
||||
return Ret.take();
|
||||
}
|
||||
case sys::fs::file_magic::macho_universal_binary: {
|
||||
OwningPtr<Binary> ret(new MachOUniversalBinary(scopedSource.take(), ec));
|
||||
if (ec) return ec;
|
||||
Result.swap(ret);
|
||||
return object_error::success;
|
||||
OwningPtr<Binary> Ret(new MachOUniversalBinary(scopedSource.take(), EC));
|
||||
if (EC)
|
||||
return EC;
|
||||
return Ret.take();
|
||||
}
|
||||
case sys::fs::file_magic::coff_object:
|
||||
case sys::fs::file_magic::coff_import_library:
|
||||
case sys::fs::file_magic::pecoff_executable: {
|
||||
OwningPtr<Binary> ret(
|
||||
OwningPtr<Binary> Ret(
|
||||
ObjectFile::createCOFFObjectFile(scopedSource.take()));
|
||||
if (!ret)
|
||||
if (!Ret)
|
||||
return object_error::invalid_file_type;
|
||||
Result.swap(ret);
|
||||
return object_error::success;
|
||||
return Ret.take();
|
||||
}
|
||||
case sys::fs::file_magic::unknown:
|
||||
case sys::fs::file_magic::bitcode:
|
||||
@ -110,9 +104,9 @@ error_code object::createBinary(MemoryBuffer *Source,
|
||||
llvm_unreachable("Unexpected Binary File Type");
|
||||
}
|
||||
|
||||
error_code object::createBinary(StringRef Path, OwningPtr<Binary> &Result) {
|
||||
ErrorOr<Binary *> object::createBinary(StringRef Path) {
|
||||
OwningPtr<MemoryBuffer> File;
|
||||
if (error_code ec = MemoryBuffer::getFileOrSTDIN(Path, File))
|
||||
return ec;
|
||||
return createBinary(File.take(), Result);
|
||||
if (error_code EC = MemoryBuffer::getFileOrSTDIN(Path, File))
|
||||
return EC;
|
||||
return createBinary(File.take());
|
||||
}
|
||||
|
Reference in New Issue
Block a user