[llvm] r305730 - Have writeCOFFWriter return Expected<unique_ptr>.
Eric Beckmann via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 19 11:49:06 PDT 2017
Author: ecbeckmann
Date: Mon Jun 19 13:49:05 2017
New Revision: 305730
URL: http://llvm.org/viewvc/llvm-project?rev=305730&view=rev
Log:
Have writeCOFFWriter return Expected<unique_ptr>.
Summary: Have writeCOFFWriter return Expected<unique_ptr> instead of requiring being passed an uninitialized unique_ptr.
Reviewers: zturner, ruiu
Subscribers: hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D34307
Modified:
llvm/trunk/include/llvm/Object/WindowsResource.h
llvm/trunk/lib/Object/WindowsResource.cpp
llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp
Modified: llvm/trunk/include/llvm/Object/WindowsResource.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/WindowsResource.h?rev=305730&r1=305729&r2=305730&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/WindowsResource.h (original)
+++ llvm/trunk/include/llvm/Object/WindowsResource.h Mon Jun 19 13:49:05 2017
@@ -179,9 +179,9 @@ private:
std::vector<std::vector<UTF16>> StringTable;
};
-Error writeWindowsResourceCOFF(std::unique_ptr<MemoryBuffer> &OutputBuffer,
- llvm::COFF::MachineTypes MachineType,
- const WindowsResourceParser &Parser);
+Expected<std::unique_ptr<MemoryBuffer>>
+writeWindowsResourceCOFF(llvm::COFF::MachineTypes MachineType,
+ const WindowsResourceParser &Parser);
} // namespace object
} // namespace llvm
Modified: llvm/trunk/lib/Object/WindowsResource.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WindowsResource.cpp?rev=305730&r1=305729&r2=305730&view=diff
==============================================================================
--- llvm/trunk/lib/Object/WindowsResource.cpp (original)
+++ llvm/trunk/lib/Object/WindowsResource.cpp Mon Jun 19 13:49:05 2017
@@ -307,10 +307,9 @@ uint32_t WindowsResourceParser::TreeNode
class WindowsResourceCOFFWriter {
public:
- WindowsResourceCOFFWriter(std::unique_ptr<MemoryBuffer> &OutputBuffer,
- COFF::MachineTypes MachineType,
+ WindowsResourceCOFFWriter(COFF::MachineTypes MachineType,
const WindowsResourceParser &Parser, Error &E);
- Error write();
+ std::unique_ptr<MemoryBuffer> write();
private:
void performFileLayout();
@@ -326,7 +325,7 @@ private:
void writeDirectoryTree();
void writeDirectoryStringTable();
void writeFirstSectionRelocations();
- std::unique_ptr<MemoryBuffer> &OutputBuffer;
+ std::unique_ptr<MemoryBuffer> OutputBuffer;
char *BufferStart;
uint64_t CurrentOffset = 0;
COFF::MachineTypes MachineType;
@@ -346,11 +345,10 @@ private:
};
WindowsResourceCOFFWriter::WindowsResourceCOFFWriter(
- std::unique_ptr<MemoryBuffer> &OutputBuffer, COFF::MachineTypes MachineType,
- const WindowsResourceParser &Parser, Error &E)
- : OutputBuffer(OutputBuffer), MachineType(MachineType),
- Resources(Parser.getTree()), Data(Parser.getData()),
- StringTable(Parser.getStringTable()) {
+ COFF::MachineTypes MachineType, const WindowsResourceParser &Parser,
+ Error &E)
+ : MachineType(MachineType), Resources(Parser.getTree()),
+ Data(Parser.getData()), StringTable(Parser.getStringTable()) {
performFileLayout();
OutputBuffer = MemoryBuffer::getNewMemBuffer(FileSize);
@@ -417,7 +415,7 @@ static std::time_t getTime() {
return Now;
}
-Error WindowsResourceCOFFWriter::write() {
+std::unique_ptr<MemoryBuffer> WindowsResourceCOFFWriter::write() {
BufferStart = const_cast<char *>(OutputBuffer->getBufferStart());
writeCOFFHeader();
@@ -428,7 +426,7 @@ Error WindowsResourceCOFFWriter::write()
writeSymbolTable();
writeStringTable();
- return Error::success();
+ return std::move(OutputBuffer);
}
void WindowsResourceCOFFWriter::writeCOFFHeader() {
@@ -716,13 +714,13 @@ void WindowsResourceCOFFWriter::writeFir
}
}
-Error writeWindowsResourceCOFF(std::unique_ptr<MemoryBuffer> &OutputBuffer,
- COFF::MachineTypes MachineType,
- const WindowsResourceParser &Parser) {
+Expected<std::unique_ptr<MemoryBuffer>>
+writeWindowsResourceCOFF(COFF::MachineTypes MachineType,
+ const WindowsResourceParser &Parser) {
Error E = Error::success();
- WindowsResourceCOFFWriter Writer(OutputBuffer, MachineType, Parser, E);
+ WindowsResourceCOFFWriter Writer(MachineType, Parser, E);
if (E)
- return E;
+ return std::move(E);
return Writer.write();
}
Modified: llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp?rev=305730&r1=305729&r2=305730&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp (original)
+++ llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp Mon Jun 19 13:49:05 2017
@@ -89,6 +89,12 @@ void error(Error EC) {
[&](const ErrorInfoBase &EI) { reportError(EI.message()); });
}
+template <typename T> T error(Expected<T> EC) {
+ if (!EC)
+ error(EC.takeError());
+ return std::move(EC.get());
+}
+
int main(int argc_, const char *argv_[]) {
sys::PrintStackTraceOnErrorSignal(argv_[0]);
PrettyStackTraceProgram X(argc_, argv_);
@@ -175,10 +181,7 @@ int main(int argc_, const char *argv_[])
if (Verbose) {
int EntryNumber = 0;
- Expected<ResourceEntryRef> EntryOrErr = RF->getHeadEntry();
- if (!EntryOrErr)
- error(EntryOrErr.takeError());
- ResourceEntryRef Entry = EntryOrErr.get();
+ ResourceEntryRef Entry = error(RF->getHeadEntry());
bool End = false;
while (!End) {
error(Entry.moveNext(End));
@@ -194,9 +197,8 @@ int main(int argc_, const char *argv_[])
Parser.printTree(outs());
}
- std::unique_ptr<MemoryBuffer> OutputBuffer;
- error(llvm::object::writeWindowsResourceCOFF(OutputBuffer, MachineType,
- Parser));
+ std::unique_ptr<MemoryBuffer> OutputBuffer =
+ error(llvm::object::writeWindowsResourceCOFF(MachineType, Parser));
auto FileOrErr =
FileOutputBuffer::create(OutputFile, OutputBuffer->getBufferSize());
if (!FileOrErr)
More information about the llvm-commits
mailing list