[Lldb-commits] [PATCH] D68853: uint32_t options -> File::OpenOptions options
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 11 02:14:36 PDT 2019
labath added a comment.
I originally thought you would do something local, but changing this across the board is definitely better, and it doesn't seem the patch is that big. LLVM already has a utility to work out the kinks in the bitmask enum use case. Please take a look at `llvm/ADT/BitmaskEnum.h` on how to make use of that.
================
Comment at: lldb/include/lldb/Host/File.h:56
+ (1u << 8), // Close the file when executing a new process
+ eOpenOptionMax = 0xffffffffu // avoid undefined behavior
};
----------------
A better way to handle that is to make this a typed enum (`enum OpenOptions : uint16_t`). Then you can add something like ` LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/0xffffu)` to make sure the bitmask operators also work well.
================
Comment at: lldb/source/Host/common/File.cpp:42
-static const char *GetStreamOpenModeFromOptions(uint32_t options) {
+static Expected<const char *> GetStreamOpenModeFromOptions(uint32_t options) {
if (options & File::eOpenOptionAppend) {
----------------
I'd consider leaving the static function as `const char *` -- the function doesn't do anything complex, and there's only one way it can fail (which can be signalled by a nullptr), so having the Expected wrapper around that does not seem all that useful -- I'll leave it up to you though.
================
Comment at: lldb/source/Host/common/File.cpp:74
+
+Expected<File::OpenOptions> File::GetOptionsFromMode(llvm::StringRef mode) {
+ OpenOptions opts =
----------------
For similar reasons, I'd make this an Optional<OpenOptions>.
================
Comment at: lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp:1093
auto options = File::GetOptionsFromMode(py_mode.GetString());
- auto file = std::unique_ptr<File>(
- new NativeFile(PyObject_AsFileDescriptor(m_py_obj), options, false));
+ if (!options)
+ return nullptr;
----------------
If `GetOptionsFromMode` stays as `Expected` then this is not correct, as it does not handle the error case. Overall, I'd say we shouldn't use `auto` here..
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68853/new/
https://reviews.llvm.org/D68853
More information about the lldb-commits
mailing list