Index: include/lldb/Target/CPPLanguageRuntime.h =================================================================== --- include/lldb/Target/CPPLanguageRuntime.h +++ include/lldb/Target/CPPLanguageRuntime.h @@ -78,7 +78,7 @@ lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread, bool stop_others) override; - bool IsRuntimeSupportValue(ValueObject &valobj) override; + bool IsWhitelistedRuntimeValue(ConstString name) override; protected: // Classes that inherit from CPPLanguageRuntime can see and modify these CPPLanguageRuntime(Process *process); Index: include/lldb/Target/LanguageRuntime.h =================================================================== --- include/lldb/Target/LanguageRuntime.h +++ include/lldb/Target/LanguageRuntime.h @@ -152,9 +152,9 @@ virtual lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread, bool stop_others) = 0; - /// Identify whether a value is a language implementation detaul - /// that should be hidden from the user interface by default. - virtual bool IsRuntimeSupportValue(ValueObject &valobj) { return false; } + /// Identify whether a name is a runtime value that should not be hidden by + /// from the user interface. + virtual bool IsWhitelistedRuntimeValue(ConstString name) { return false; } virtual void ModulesDidLoad(const ModuleList &module_list) {} Index: include/lldb/Target/ObjCLanguageRuntime.h =================================================================== --- include/lldb/Target/ObjCLanguageRuntime.h +++ include/lldb/Target/ObjCLanguageRuntime.h @@ -301,8 +301,7 @@ /// Check whether the name is "self" or "_cmd" and should show up in /// "frame variable". - static bool IsWhitelistedRuntimeValue(ConstString name); - bool IsRuntimeSupportValue(ValueObject &valobj) override; + bool IsWhitelistedRuntimeValue(ConstString name) override; protected: // Classes that inherit from ObjCLanguageRuntime can see and modify these Index: source/Core/ValueObject.cpp =================================================================== --- source/Core/ValueObject.cpp +++ source/Core/ValueObject.cpp @@ -1695,18 +1695,20 @@ bool ValueObject::IsRuntimeSupportValue() { Process *process(GetProcessSP().get()); - if (process) { - LanguageRuntime *runtime = - process->GetLanguageRuntime(GetObjectRuntimeLanguage()); - if (!runtime) - runtime = ObjCLanguageRuntime::Get(*process); - if (runtime) - return runtime->IsRuntimeSupportValue(*this); - // If there is no language runtime, trust the compiler to mark all - // runtime support variables as artificial. - return GetVariable() && GetVariable()->IsArtificial(); + if (!process) + return false; + + // We trust the the compiler did the right thing and marked runtime support + // values as artificial. + if (!GetVariable() || !GetVariable()->IsArtificial()) + return false; + + for (auto *runtime : process->GetLanguageRuntimes()) { + if (runtime->IsWhitelistedRuntimeValue(GetName())) + return false; } - return false; + + return true; } bool ValueObject::IsNilReference() { Index: source/Target/CPPLanguageRuntime.cpp =================================================================== --- source/Target/CPPLanguageRuntime.cpp +++ source/Target/CPPLanguageRuntime.cpp @@ -43,20 +43,8 @@ CPPLanguageRuntime::CPPLanguageRuntime(Process *process) : LanguageRuntime(process) {} -bool CPPLanguageRuntime::IsRuntimeSupportValue(ValueObject &valobj) { - // All runtime support values have to be marked as artificial by the - // compiler. But not all artificial variables should be hidden from - // the user. - if (!valobj.GetVariable()) - return false; - if (!valobj.GetVariable()->IsArtificial()) - return false; - - // Whitelist "this" and since there is no ObjC++ runtime, any ObjC names. - ConstString name = valobj.GetName(); - if (name == g_this) - return false; - return !ObjCLanguageRuntime::IsWhitelistedRuntimeValue(name); +bool CPPLanguageRuntime::IsWhitelistedRuntimeValue(ConstString name) { + return name == g_this; } bool CPPLanguageRuntime::GetObjectDescription(Stream &str, Index: source/Target/ObjCLanguageRuntime.cpp =================================================================== --- source/Target/ObjCLanguageRuntime.cpp +++ source/Target/ObjCLanguageRuntime.cpp @@ -46,19 +46,6 @@ return name == g_self || name == g_cmd; } -bool ObjCLanguageRuntime::IsRuntimeSupportValue(ValueObject &valobj) { - // All runtime support values have to be marked as artificial by the - // compiler. But not all artificial variables should be hidden from - // the user. - if (!valobj.GetVariable()) - return false; - if (!valobj.GetVariable()->IsArtificial()) - return false; - - // Whitelist "self" and "_cmd". - return !IsWhitelistedRuntimeValue(valobj.GetName()); -} - bool ObjCLanguageRuntime::AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp, const char *class_name) {