//===-- OptionGroupPythonClassWithDict.h ------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H #define LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H #include "lldb/Interpreter/Options.h" #include "lldb/Utility/Flags.h" #include "lldb/Utility/StructuredData.h" #include "lldb/lldb-types.h" namespace lldb_private { // Use this Option group if you have a python class that implements some // Python extension point, and you pass a SBStructuredData to the class // __init__ method. // class_option specifies the class name // the key and value options are read in in pairs, and a // StructuredData::Dictionary is constructed with those pairs. class OptionGroupPythonClassWithDict : public OptionGroup { public: enum OptionKind { eScriptClass = 1 << 0, eDictKey = 1 << 1, eDictValue = 1 << 2, ePythonFunction = 1 << 3, eAllOptions = (eScriptClass | eDictKey | eDictValue | ePythonFunction) }; OptionGroupPythonClassWithDict(const char *class_use, bool is_class = true, int class_option = 'C', int key_option = 'k', int value_option = 'v', uint16_t required_options = eScriptClass | ePythonFunction); ~OptionGroupPythonClassWithDict() override = default; llvm::ArrayRef GetDefinitions() override { return llvm::ArrayRef(m_option_definition); } Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, ExecutionContext *execution_context) override; void OptionParsingStarting(ExecutionContext *execution_context) override; Status OptionParsingFinished(ExecutionContext *execution_context) override; const StructuredData::DictionarySP GetStructuredData() { return m_dict_sp; } const std::string &GetName() { return m_name; } protected: std::string m_name; std::string m_current_key; StructuredData::DictionarySP m_dict_sp; std::string m_class_usage_text, m_key_usage_text, m_value_usage_text; bool m_is_class; OptionDefinition m_option_definition[4]; Flags m_required_options; }; } // namespace lldb_private #endif // LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H