brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 9260cea Raw
57 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/ValueObject/ValueObjectUpdater.h"10 11using namespace lldb_private;12 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, then17  // water it down to the static type.18  m_root_valobj_sp = in_valobj_sp->GetQualifiedRepresentationIfAvailable(19      lldb::eNoDynamicValues, false);20}21 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 52lldb::ProcessSP ValueObjectUpdater::GetProcessSP() const {53  if (m_root_valobj_sp)54    return m_root_valobj_sp->GetProcessSP();55  return lldb::ProcessSP();56}57