[Lldb-commits] [PATCH] D23545: Minidump parsing
Zachary Turner via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 19 14:19:37 PDT 2016
zturner added a comment.
Were you still going to change all the `Optionals` to raw pointers (or even better, `llvm::Errors`)
================
Comment at: source/Plugins/Process/minidump/MinidumpParser.cpp:21
@@ +20,3 @@
+MinidumpParser::MinidumpParser(const lldb::DataBufferSP &data_buf_sp)
+ : m_data_sp(data_buf_sp), m_header(nullptr), m_valid_data(true)
+{
----------------
I'm not crazy about the idea of allowing the constructor to fail and then checking `IsValidData()` after you construct it. One way LLVM solves this is by having a static function that returns `Expected<T>`. You would use it like this:
```
Expected<MinidumpParser> MinidumpParser::create(const lldb::DataBufferSP &data_buf_sp) {
if (data_buf_sp->GetByteSize() < sizeof(MinidumpHeader))
return make_error<StringError>("Insufficient buffer!");
MinidumpHeader *header = nullptr;
if (auto EC = MinidumpHeader::Parse(header_data, header))
return std::move(EC);
...
return MinidumpParser(header, directory_map);
}
auto Parser = MinidumpParser::create(buffer);
if (!Parser) {
// Handle the error
}
```
This way it's impossible to create a MinidumpParser that is invalid.
Up to you whether you want to do this, but I think it is a very good (and safe) pattern that I'd love to see LLDB start adopting more often.
https://reviews.llvm.org/D23545
More information about the lldb-commits
mailing list