1*fe6060f1SDimitry Andric //===-- ValueObjectUpdater.cpp --------------------------------------------===// 2*fe6060f1SDimitry Andric // 3*fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*fe6060f1SDimitry Andric // 7*fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 8*fe6060f1SDimitry Andric 9*fe6060f1SDimitry Andric #include "lldb/Core/ValueObjectUpdater.h" 10*fe6060f1SDimitry Andric 11*fe6060f1SDimitry Andric using namespace lldb_private; 12*fe6060f1SDimitry Andric ValueObjectUpdater(lldb::ValueObjectSP in_valobj_sp)13*fe6060f1SDimitry AndricValueObjectUpdater::ValueObjectUpdater(lldb::ValueObjectSP in_valobj_sp) { 14*fe6060f1SDimitry Andric if (!in_valobj_sp) 15*fe6060f1SDimitry Andric return; 16*fe6060f1SDimitry Andric // If the user passes in a value object that is dynamic or synthetic, then 17*fe6060f1SDimitry Andric // water it down to the static type. 18*fe6060f1SDimitry Andric m_root_valobj_sp = in_valobj_sp->GetQualifiedRepresentationIfAvailable( 19*fe6060f1SDimitry Andric lldb::eNoDynamicValues, false); 20*fe6060f1SDimitry Andric } 21*fe6060f1SDimitry Andric GetSP()22*fe6060f1SDimitry Andriclldb::ValueObjectSP ValueObjectUpdater::GetSP() { 23*fe6060f1SDimitry Andric lldb::ProcessSP process_sp = GetProcessSP(); 24*fe6060f1SDimitry Andric if (!process_sp) 25*fe6060f1SDimitry Andric return lldb::ValueObjectSP(); 26*fe6060f1SDimitry Andric 27*fe6060f1SDimitry Andric const uint32_t current_stop_id = process_sp->GetLastNaturalStopID(); 28*fe6060f1SDimitry Andric if (current_stop_id == m_stop_id) 29*fe6060f1SDimitry Andric return m_user_valobj_sp; 30*fe6060f1SDimitry Andric 31*fe6060f1SDimitry Andric m_stop_id = current_stop_id; 32*fe6060f1SDimitry Andric 33*fe6060f1SDimitry Andric if (!m_root_valobj_sp) { 34*fe6060f1SDimitry Andric m_user_valobj_sp.reset(); 35*fe6060f1SDimitry Andric return m_root_valobj_sp; 36*fe6060f1SDimitry Andric } 37*fe6060f1SDimitry Andric 38*fe6060f1SDimitry Andric m_user_valobj_sp = m_root_valobj_sp; 39*fe6060f1SDimitry Andric 40*fe6060f1SDimitry Andric lldb::ValueObjectSP dynamic_sp = 41*fe6060f1SDimitry Andric m_user_valobj_sp->GetDynamicValue(lldb::eDynamicDontRunTarget); 42*fe6060f1SDimitry Andric if (dynamic_sp) 43*fe6060f1SDimitry Andric m_user_valobj_sp = dynamic_sp; 44*fe6060f1SDimitry Andric 45*fe6060f1SDimitry Andric lldb::ValueObjectSP synthetic_sp = m_user_valobj_sp->GetSyntheticValue(); 46*fe6060f1SDimitry Andric if (synthetic_sp) 47*fe6060f1SDimitry Andric m_user_valobj_sp = synthetic_sp; 48*fe6060f1SDimitry Andric 49*fe6060f1SDimitry Andric return m_user_valobj_sp; 50*fe6060f1SDimitry Andric } 51*fe6060f1SDimitry Andric GetProcessSP() const52*fe6060f1SDimitry Andriclldb::ProcessSP ValueObjectUpdater::GetProcessSP() const { 53*fe6060f1SDimitry Andric if (m_root_valobj_sp) 54*fe6060f1SDimitry Andric return m_root_valobj_sp->GetProcessSP(); 55*fe6060f1SDimitry Andric return lldb::ProcessSP(); 56*fe6060f1SDimitry Andric } 57