1 //===-- OptionGroupPythonClassWithDict.h ------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H 10 #define LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H 11 12 #include "lldb/Interpreter/Options.h" 13 #include "lldb/Utility/Flags.h" 14 #include "lldb/Utility/StructuredData.h" 15 #include "lldb/lldb-types.h" 16 17 namespace lldb_private { 18 19 // Use this Option group if you have a python class that implements some 20 // Python extension point, and you pass a SBStructuredData to the class 21 // __init__ method. 22 // class_option specifies the class name 23 // the key and value options are read in in pairs, and a 24 // StructuredData::Dictionary is constructed with those pairs. 25 class OptionGroupPythonClassWithDict : public OptionGroup { 26 public: 27 enum OptionKind { 28 eScriptClass = 1 << 0, 29 eDictKey = 1 << 1, 30 eDictValue = 1 << 2, 31 ePythonFunction = 1 << 3, 32 eAllOptions = (eScriptClass | eDictKey | eDictValue | ePythonFunction) 33 }; 34 35 OptionGroupPythonClassWithDict(const char *class_use, bool is_class = true, 36 int class_option = 'C', int key_option = 'k', 37 int value_option = 'v', 38 uint16_t required_options = eScriptClass | 39 ePythonFunction); 40 41 ~OptionGroupPythonClassWithDict() override = default; 42 GetDefinitions()43 llvm::ArrayRef<OptionDefinition> GetDefinitions() override { 44 return llvm::ArrayRef<OptionDefinition>(m_option_definition); 45 } 46 47 Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, 48 ExecutionContext *execution_context) override; 49 50 void OptionParsingStarting(ExecutionContext *execution_context) override; 51 Status OptionParsingFinished(ExecutionContext *execution_context) override; 52 GetStructuredData()53 const StructuredData::DictionarySP GetStructuredData() { 54 return m_dict_sp; 55 } GetName()56 const std::string &GetName() { 57 return m_name; 58 } 59 60 protected: 61 std::string m_name; 62 std::string m_current_key; 63 StructuredData::DictionarySP m_dict_sp; 64 std::string m_class_usage_text, m_key_usage_text, m_value_usage_text; 65 bool m_is_class; 66 OptionDefinition m_option_definition[4]; 67 Flags m_required_options; 68 }; 69 70 } // namespace lldb_private 71 72 #endif // LLDB_INTERPRETER_OPTIONGROUPPYTHONCLASSWITHDICT_H 73