Skip to content

[lldb] Devirtualize GetValueProperties (NFC) #126583

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions lldb/include/lldb/Core/UserSettingsController.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ class Properties {

virtual ~Properties();

virtual lldb::OptionValuePropertiesSP GetValueProperties() const {
// This function is virtual in case subclasses want to lazily implement
// creating the properties.
lldb::OptionValuePropertiesSP GetValueProperties() const {
return m_collection_sp;
}

Expand Down
33 changes: 7 additions & 26 deletions lldb/source/Core/UserSettingsController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,64 +40,45 @@ Properties::~Properties() = default;
lldb::OptionValueSP
Properties::GetPropertyValue(const ExecutionContext *exe_ctx,
llvm::StringRef path, Status &error) const {
OptionValuePropertiesSP properties_sp(GetValueProperties());
if (properties_sp)
return properties_sp->GetSubValue(exe_ctx, path, error);
return lldb::OptionValueSP();
return m_collection_sp->GetSubValue(exe_ctx, path, error);
}

Status Properties::SetPropertyValue(const ExecutionContext *exe_ctx,
VarSetOperationType op,
llvm::StringRef path,
llvm::StringRef value) {
OptionValuePropertiesSP properties_sp(GetValueProperties());
if (properties_sp)
return properties_sp->SetSubValue(exe_ctx, op, path, value);
return Status::FromErrorString("no properties");
return m_collection_sp->SetSubValue(exe_ctx, op, path, value);
}

void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx,
Stream &strm, uint32_t dump_mask,
bool is_json) {
OptionValuePropertiesSP properties_sp(GetValueProperties());
if (!properties_sp)
return;

if (is_json) {
llvm::json::Value json = properties_sp->ToJSON(exe_ctx);
llvm::json::Value json = m_collection_sp->ToJSON(exe_ctx);
strm.Printf("%s", llvm::formatv("{0:2}", json).str().c_str());
} else
properties_sp->DumpValue(exe_ctx, strm, dump_mask);
m_collection_sp->DumpValue(exe_ctx, strm, dump_mask);
}

void Properties::DumpAllDescriptions(CommandInterpreter &interpreter,
Stream &strm) const {
strm.PutCString("Top level variables:\n\n");

OptionValuePropertiesSP properties_sp(GetValueProperties());
if (properties_sp)
return properties_sp->DumpAllDescriptions(interpreter, strm);
return m_collection_sp->DumpAllDescriptions(interpreter, strm);
}

Status Properties::DumpPropertyValue(const ExecutionContext *exe_ctx,
Stream &strm,
llvm::StringRef property_path,
uint32_t dump_mask, bool is_json) {
OptionValuePropertiesSP properties_sp(GetValueProperties());
if (properties_sp) {
return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path,
return m_collection_sp->DumpPropertyValue(exe_ctx, strm, property_path,
dump_mask, is_json);
}
return Status::FromErrorString("empty property list");
}

size_t
Properties::Apropos(llvm::StringRef keyword,
std::vector<const Property *> &matching_properties) const {
OptionValuePropertiesSP properties_sp(GetValueProperties());
if (properties_sp) {
properties_sp->Apropos(keyword, matching_properties);
}
m_collection_sp->Apropos(keyword, matching_properties);
return matching_properties.size();
}

Expand Down