Mercurial > hg > CbC > CbC_llvm
comparison lib/Object/Binary.cpp @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | afa8332a0e37 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
34 | 34 |
35 StringRef Binary::getFileName() const { return Data.getBufferIdentifier(); } | 35 StringRef Binary::getFileName() const { return Data.getBufferIdentifier(); } |
36 | 36 |
37 MemoryBufferRef Binary::getMemoryBufferRef() const { return Data; } | 37 MemoryBufferRef Binary::getMemoryBufferRef() const { return Data; } |
38 | 38 |
39 ErrorOr<std::unique_ptr<Binary>> object::createBinary(MemoryBufferRef Buffer, | 39 Expected<std::unique_ptr<Binary>> object::createBinary(MemoryBufferRef Buffer, |
40 LLVMContext *Context) { | 40 LLVMContext *Context) { |
41 sys::fs::file_magic Type = sys::fs::identify_magic(Buffer.getBuffer()); | 41 sys::fs::file_magic Type = sys::fs::identify_magic(Buffer.getBuffer()); |
42 | 42 |
43 switch (Type) { | 43 switch (Type) { |
44 case sys::fs::file_magic::archive: | 44 case sys::fs::file_magic::archive: |
65 case sys::fs::file_magic::bitcode: | 65 case sys::fs::file_magic::bitcode: |
66 return ObjectFile::createSymbolicFile(Buffer, Type, Context); | 66 return ObjectFile::createSymbolicFile(Buffer, Type, Context); |
67 case sys::fs::file_magic::macho_universal_binary: | 67 case sys::fs::file_magic::macho_universal_binary: |
68 return MachOUniversalBinary::create(Buffer); | 68 return MachOUniversalBinary::create(Buffer); |
69 case sys::fs::file_magic::unknown: | 69 case sys::fs::file_magic::unknown: |
70 case sys::fs::file_magic::coff_cl_gl_object: | |
70 case sys::fs::file_magic::windows_resource: | 71 case sys::fs::file_magic::windows_resource: |
71 // Unrecognized object file format. | 72 // Unrecognized object file format. |
72 return object_error::invalid_file_type; | 73 return errorCodeToError(object_error::invalid_file_type); |
73 } | 74 } |
74 llvm_unreachable("Unexpected Binary File Type"); | 75 llvm_unreachable("Unexpected Binary File Type"); |
75 } | 76 } |
76 | 77 |
77 ErrorOr<OwningBinary<Binary>> object::createBinary(StringRef Path) { | 78 Expected<OwningBinary<Binary>> object::createBinary(StringRef Path) { |
78 ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr = | 79 ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr = |
79 MemoryBuffer::getFileOrSTDIN(Path); | 80 MemoryBuffer::getFileOrSTDIN(Path); |
80 if (std::error_code EC = FileOrErr.getError()) | 81 if (std::error_code EC = FileOrErr.getError()) |
81 return EC; | 82 return errorCodeToError(EC); |
82 std::unique_ptr<MemoryBuffer> &Buffer = FileOrErr.get(); | 83 std::unique_ptr<MemoryBuffer> &Buffer = FileOrErr.get(); |
83 | 84 |
84 ErrorOr<std::unique_ptr<Binary>> BinOrErr = | 85 Expected<std::unique_ptr<Binary>> BinOrErr = |
85 createBinary(Buffer->getMemBufferRef()); | 86 createBinary(Buffer->getMemBufferRef()); |
86 if (std::error_code EC = BinOrErr.getError()) | 87 if (!BinOrErr) |
87 return EC; | 88 return BinOrErr.takeError(); |
88 std::unique_ptr<Binary> &Bin = BinOrErr.get(); | 89 std::unique_ptr<Binary> &Bin = BinOrErr.get(); |
89 | 90 |
90 return OwningBinary<Binary>(std::move(Bin), std::move(Buffer)); | 91 return OwningBinary<Binary>(std::move(Bin), std::move(Buffer)); |
91 } | 92 } |