xref: /src/contrib/llvm-project/lldb/source/Core/ValueObjectUpdater.cpp (revision fe6060f10f634930ff71b7c50291ddc610da2475)
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 Andric ValueObjectUpdater::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 Andric lldb::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 Andric lldb::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