1344a3780SDimitry Andric //===-- ValueObjectUpdater.cpp --------------------------------------------===// 2344a3780SDimitry Andric // 3344a3780SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4344a3780SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5344a3780SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6344a3780SDimitry Andric // 7344a3780SDimitry Andric //===----------------------------------------------------------------------===// 8344a3780SDimitry Andric 9344a3780SDimitry Andric #include "lldb/Core/ValueObjectUpdater.h" 10344a3780SDimitry Andric 11344a3780SDimitry Andric using namespace lldb_private; 12344a3780SDimitry Andric ValueObjectUpdater(lldb::ValueObjectSP in_valobj_sp)13344a3780SDimitry AndricValueObjectUpdater::ValueObjectUpdater(lldb::ValueObjectSP in_valobj_sp) { 14344a3780SDimitry Andric if (!in_valobj_sp) 15344a3780SDimitry Andric return; 16344a3780SDimitry Andric // If the user passes in a value object that is dynamic or synthetic, then 17344a3780SDimitry Andric // water it down to the static type. 18344a3780SDimitry Andric m_root_valobj_sp = in_valobj_sp->GetQualifiedRepresentationIfAvailable( 19344a3780SDimitry Andric lldb::eNoDynamicValues, false); 20344a3780SDimitry Andric } 21344a3780SDimitry Andric GetSP()22344a3780SDimitry Andriclldb::ValueObjectSP ValueObjectUpdater::GetSP() { 23344a3780SDimitry Andric lldb::ProcessSP process_sp = GetProcessSP(); 24344a3780SDimitry Andric if (!process_sp) 25344a3780SDimitry Andric return lldb::ValueObjectSP(); 26344a3780SDimitry Andric 27344a3780SDimitry Andric const uint32_t current_stop_id = process_sp->GetLastNaturalStopID(); 28344a3780SDimitry Andric if (current_stop_id == m_stop_id) 29344a3780SDimitry Andric return m_user_valobj_sp; 30344a3780SDimitry Andric 31344a3780SDimitry Andric m_stop_id = current_stop_id; 32344a3780SDimitry Andric 33344a3780SDimitry Andric if (!m_root_valobj_sp) { 34344a3780SDimitry Andric m_user_valobj_sp.reset(); 35344a3780SDimitry Andric return m_root_valobj_sp; 36344a3780SDimitry Andric } 37344a3780SDimitry Andric 38344a3780SDimitry Andric m_user_valobj_sp = m_root_valobj_sp; 39344a3780SDimitry Andric 40344a3780SDimitry Andric lldb::ValueObjectSP dynamic_sp = 41344a3780SDimitry Andric m_user_valobj_sp->GetDynamicValue(lldb::eDynamicDontRunTarget); 42344a3780SDimitry Andric if (dynamic_sp) 43344a3780SDimitry Andric m_user_valobj_sp = dynamic_sp; 44344a3780SDimitry Andric 45344a3780SDimitry Andric lldb::ValueObjectSP synthetic_sp = m_user_valobj_sp->GetSyntheticValue(); 46344a3780SDimitry Andric if (synthetic_sp) 47344a3780SDimitry Andric m_user_valobj_sp = synthetic_sp; 48344a3780SDimitry Andric 49344a3780SDimitry Andric return m_user_valobj_sp; 50344a3780SDimitry Andric } 51344a3780SDimitry Andric GetProcessSP() const52344a3780SDimitry Andriclldb::ProcessSP ValueObjectUpdater::GetProcessSP() const { 53344a3780SDimitry Andric if (m_root_valobj_sp) 54344a3780SDimitry Andric return m_root_valobj_sp->GetProcessSP(); 55344a3780SDimitry Andric return lldb::ProcessSP(); 56344a3780SDimitry Andric } 57