/// \brief Parse a supplied buffer (already filled with the contents of a
/// file) and create a File object.
/// The resulting File object takes ownership of the MemoryBuffer.
- virtual std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const class Registry &,
- std::unique_ptr<File> &result) const = 0;
+ virtual ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb, const class Registry &) const = 0;
};
for (const std::unique_ptr<Reader> &reader : _readers) {
if (!reader->canParse(fileType, *mb))
continue;
- if (std::error_code ec = reader->loadFile(std::move(mb), *this, result))
+ ErrorOr<std::unique_ptr<File>> fileOrErr =
+ reader->loadFile(std::move(mb), *this);
+ if (std::error_code ec = fileOrErr.getError())
return ec;
+ result = std::move(fileOrErr.get());
return std::error_code();
}
return FileT::canParse(magic);
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const class Registry &,
- std::unique_ptr<File> &result) const override {
+ ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const class Registry &) const override {
if (std::error_code ec = FileT::isCompatible(*mb, _ctx))
return ec;
- result = llvm::make_unique<FileT>(std::move(mb), _ctx);
- return std::error_code();
+ std::unique_ptr<File> ret = llvm::make_unique<FileT>(std::move(mb), _ctx);
+ return std::move(ret);
}
private:
return magic == llvm::sys::fs::file_magic::archive;
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const Registry ®,
- std::unique_ptr<File> &result) const override {
+ ErrorOr<std::unique_ptr<File>> loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const Registry ®) const override {
StringRef path = mb->getBufferIdentifier();
- result =
+ std::unique_ptr<File> ret =
llvm::make_unique<FileArchive>(std::move(mb), reg, path, _logLoading);
- return std::error_code();
+ return std::move(ret);
}
private:
mb.getBufferSize() > 32);
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const Registry ®istry,
- std::unique_ptr<File> &result) const override {
- result = llvm::make_unique<MachOFile>(std::move(mb), &_ctx);
- return std::error_code();
+ ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const Registry ®istry) const override {
+ std::unique_ptr<File> ret =
+ llvm::make_unique<MachOFile>(std::move(mb), &_ctx);
+ return std::move(ret);
}
private:
}
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const Registry ®istry,
- std::unique_ptr<File> &result) const override {
- result = llvm::make_unique<MachODylibFile>(std::move(mb), &_ctx);
- return std::error_code();
+ ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const Registry ®istry) const override {
+ std::unique_ptr<File> ret =
+ llvm::make_unique<MachODylibFile>(std::move(mb), &_ctx);
+ return std::move(ret);
}
private:
return magic == llvm::sys::fs::file_magic::coff_object;
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &,
- std::unique_ptr<File> &result) const override {
+ ErrorOr<std::unique_ptr<File>> loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const Registry &) const override {
// Parse the memory buffer as PECOFF file.
- result = llvm::make_unique<FileCOFF>(std::move(mb), _ctx);
- return std::error_code();
+ std::unique_ptr<File> ret =
+ llvm::make_unique<FileCOFF>(std::move(mb), _ctx);
+ return std::move(ret);
}
private:
return magic == llvm::sys::fs::file_magic::coff_import_library;
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const class Registry &,
- std::unique_ptr<File> &result) const override {
- result = llvm::make_unique<FileImportLibrary>(std::move(mb),
- _ctx.getMachineType());
- return std::error_code();
+ ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const class Registry &) const override {
+ std::unique_ptr<File> ret = llvm::make_unique<FileImportLibrary>(
+ std::move(mb), _ctx.getMachineType());
+ return std::move(ret);
}
private:
return ext.equals(".objtxt") || ext.equals(".yaml");
}
- std::error_code loadFile(std::unique_ptr<MemoryBuffer> mb,
- const class Registry &,
- std::unique_ptr<File> &result) const override {
+ ErrorOr<std::unique_ptr<File>>
+ loadFile(std::unique_ptr<MemoryBuffer> mb,
+ const class Registry &) const override {
// Create YAML Input Reader.
YamlContext yamlContext;
yamlContext._registry = &_registry;
File *f = const_cast<File *>(file);
f->setLastError(std::error_code());
f->setSharedMemoryBuffer(smb);
- result = std::unique_ptr<File>(f);
- return make_error_code(lld::YamlReaderError::success);
+ return std::unique_ptr<File>(f);
}
private: