Complete ToJSON for OptionValues (#137375)
Completes the ToJSON function for `OptionValue` types and make the interface function pure virtual --------- Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>
This commit is contained in:
parent
e9a34e4236
commit
d1adb0b8cd
@ -93,15 +93,7 @@ public:
|
||||
virtual void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) = 0;
|
||||
|
||||
// TODO: make this function pure virtual after implementing it in all
|
||||
// child classes.
|
||||
virtual llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) {
|
||||
// Return nullptr which will create a llvm::json::Value() that is a NULL
|
||||
// value. No setting should ever really have a NULL value in JSON. This
|
||||
// indicates an error occurred and if/when we add a FromJSON() it will know
|
||||
// to fail if someone tries to set it with a NULL JSON value.
|
||||
return nullptr;
|
||||
}
|
||||
virtual llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const = 0;
|
||||
|
||||
virtual Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -38,6 +38,8 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
VarSetOperationType op = eVarSetOperationAssign) override;
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value;
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value;
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -29,6 +29,8 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
VarSetOperationType op = eVarSetOperationAssign) override;
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value.GetPath();
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -31,7 +31,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
Status
|
||||
SetValueFromString(llvm::StringRef value,
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override;
|
||||
|
||||
llvm::StringRef GetName() const override { return m_name; }
|
||||
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_regex.GetText();
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value;
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value;
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_current_value;
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
uint32_t dump_mask) override;
|
||||
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override {
|
||||
llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) const override {
|
||||
return m_uuid.GetAsString();
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
// By default, dump all pairs.
|
||||
void Dump(Stream *s, int pair_index = -1);
|
||||
|
||||
llvm::json::Value ToJSON();
|
||||
llvm::json::Value ToJSON() const;
|
||||
|
||||
bool IsEmpty() const {
|
||||
std::lock_guard<std::mutex> lock(m_pairs_mutex);
|
||||
|
@ -33,6 +33,14 @@ void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueArch::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
if (m_current_value.IsValid())
|
||||
return llvm::json::Value(m_current_value.GetArchitectureName());
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Status OptionValueArch::SetValueFromString(llvm::StringRef value,
|
||||
VarSetOperationType op) {
|
||||
Status error;
|
||||
|
@ -75,7 +75,8 @@ void OptionValueArray::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value OptionValueArray::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
llvm::json::Value
|
||||
OptionValueArray::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
llvm::json::Array json_array;
|
||||
const uint32_t size = m_values.size();
|
||||
for (uint32_t i = 0; i < size; ++i)
|
||||
|
@ -88,7 +88,7 @@ void OptionValueDictionary::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueDictionary::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValueDictionary::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
llvm::json::Object dict;
|
||||
for (const auto &value : m_values) {
|
||||
dict.try_emplace(value.first(), value.second->ToJSON(exe_ctx));
|
||||
|
@ -38,7 +38,7 @@ void OptionValueEnumeration::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueEnumeration::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValueEnumeration::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
for (const auto &enums : m_enumerations) {
|
||||
if (enums.value.value == m_current_value)
|
||||
return enums.cstring.GetStringRef();
|
||||
|
@ -46,6 +46,19 @@ void OptionValueFileColonLine::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueFileColonLine::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
StreamString stream;
|
||||
if (m_file_spec)
|
||||
stream << '"' << m_file_spec.GetPath().c_str() << '"';
|
||||
if (m_line_number != LLDB_INVALID_LINE_NUMBER)
|
||||
stream.Printf(":%d", m_line_number);
|
||||
if (m_column_number != LLDB_INVALID_COLUMN_NUMBER)
|
||||
stream.Printf(":%d", m_column_number);
|
||||
|
||||
return llvm::json::Value(stream.GetString());
|
||||
}
|
||||
|
||||
Status OptionValueFileColonLine::SetValueFromString(llvm::StringRef value,
|
||||
VarSetOperationType op) {
|
||||
Status error;
|
||||
|
@ -42,7 +42,7 @@ void OptionValueFileSpecList::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueFileSpecList::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValueFileSpecList::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
std::lock_guard<std::recursive_mutex> lock(m_mutex);
|
||||
llvm::json::Array array;
|
||||
for (const auto &file_spec : m_current_value)
|
||||
|
@ -26,7 +26,8 @@ void OptionValueFormat::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value OptionValueFormat::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
llvm::json::Value
|
||||
OptionValueFormat::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
return FormatManager::GetFormatAsCString(m_current_value);
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ void OptionValueFormatEntity::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueFormatEntity::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValueFormatEntity::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
std::string escaped;
|
||||
EscapeBackticks(m_current_format, escaped);
|
||||
return escaped;
|
||||
|
@ -29,7 +29,8 @@ void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value OptionValueLanguage::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
llvm::json::Value
|
||||
OptionValueLanguage::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
return Language::GetNameForLanguageType(m_current_value);
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ void OptionValuePathMappings::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValuePathMappings::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValuePathMappings::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
return m_path_mappings.ToJSON();
|
||||
}
|
||||
|
||||
|
@ -335,7 +335,7 @@ void OptionValueProperties::DumpValue(const ExecutionContext *exe_ctx,
|
||||
}
|
||||
|
||||
llvm::json::Value
|
||||
OptionValueProperties::ToJSON(const ExecutionContext *exe_ctx) {
|
||||
OptionValueProperties::ToJSON(const ExecutionContext *exe_ctx) const {
|
||||
llvm::json::Object json_properties;
|
||||
const size_t num_properties = m_properties.size();
|
||||
for (size_t i = 0; i < num_properties; ++i) {
|
||||
|
@ -180,7 +180,7 @@ void PathMappingList::Dump(Stream *s, int pair_index) {
|
||||
}
|
||||
}
|
||||
|
||||
llvm::json::Value PathMappingList::ToJSON() {
|
||||
llvm::json::Value PathMappingList::ToJSON() const {
|
||||
llvm::json::Array entries;
|
||||
std::lock_guard<std::mutex> lock(m_pairs_mutex);
|
||||
for (const auto &pair : m_pairs) {
|
||||
|
@ -1044,6 +1044,10 @@ class SettingsCommandTestCase(TestBase):
|
||||
# Test OptionValueEnumeration
|
||||
self.verify_setting_value_json("target.x86-disassembly-flavor", "intel")
|
||||
|
||||
# Test OptionValueArch
|
||||
self.verify_setting_value_json("target.default-arch", "x86_64")
|
||||
self.runCmd("settings clear target.default-arch")
|
||||
|
||||
def test_global_option(self):
|
||||
# This command used to crash the settings because -g was signaled by a
|
||||
# NULL execution context (not one with an empty Target...) and in the
|
||||
|
Loading…
x
Reference in New Issue
Block a user