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