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 
13 ValueObjectUpdater::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 
22 lldb::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 
52 lldb::ProcessSP ValueObjectUpdater::GetProcessSP() const {
53   if (m_root_valobj_sp)
54     return m_root_valobj_sp->GetProcessSP();
55   return lldb::ProcessSP();
56 }
57