| //===-- ValueObjectSynthesizedValue.cpp -----------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "lldb/ValueObject/ValueObjectSynthesizedValue.h" | |
| #include "lldb/Target/ExecutionContext.h" | |
| #include "lldb/Utility/Status.h" | |
| using namespace lldb; | |
| using namespace lldb_private; | |
| lldb::ValueObjectSP ValueObjectSynthesizedValue::Create(ValueObject &valobj, | |
| lldb::ValueType type) { | |
| ExecutionContext exe_ctx(valobj.GetExecutionContextRef()); | |
| auto manager_sp = ValueObjectManager::Create(); | |
| return (new ValueObjectSynthesizedValue( | |
| exe_ctx.GetBestExecutionContextScope(), *manager_sp, | |
| valobj.GetSP(), type)) | |
| ->GetSP(); | |
| } | |
| ValueObjectSynthesizedValue::ValueObjectSynthesizedValue( | |
| ExecutionContextScope *exe_scope, ValueObjectManager &manager, | |
| const lldb::ValueObjectSP &valobj_sp, lldb::ValueType type) | |
| : ValueObject(exe_scope, manager), m_valobj_sp(valobj_sp), m_type(type) { | |
| SetName(valobj_sp->GetName()); | |
| } | |
| ValueObjectSynthesizedValue::~ValueObjectSynthesizedValue() = default; | |
| llvm::Expected<uint64_t> ValueObjectSynthesizedValue::GetByteSize() { | |
| return m_valobj_sp->GetByteSize(); | |
| } | |
| llvm::Expected<uint32_t> | |
| ValueObjectSynthesizedValue::CalculateNumChildren(uint32_t max) { | |
| return m_valobj_sp->GetNumChildren(max); | |
| } | |
| bool ValueObjectSynthesizedValue::IsInScope() { | |
| return m_valobj_sp->IsInScope(); | |
| } | |
| CompilerType ValueObjectSynthesizedValue::GetCompilerTypeImpl() { | |
| return m_valobj_sp->GetCompilerType(); | |
| } | |
| bool ValueObjectSynthesizedValue::UpdateValue() { | |
| SetValueIsValid(false); | |
| m_error.Clear(); | |
| if (!m_valobj_sp->UpdateValueIfNeeded(false)) { | |
| if (m_error.Success() && m_valobj_sp->GetError().Fail()) | |
| m_error = m_valobj_sp->GetError().Clone(); | |
| return false; | |
| } | |
| m_update_point.SetUpdated(); | |
| m_value = m_valobj_sp->GetValue(); | |
| SetAddressTypeOfChildren(m_valobj_sp->GetAddressTypeOfChildren()); | |
| ExecutionContext exe_ctx(GetExecutionContextRef()); | |
| m_error = m_value.GetValueAsData(&exe_ctx, m_data, GetModule().get()); | |
| SetValueDidChange(m_valobj_sp->GetValueDidChange()); | |
| SetValueIsValid(m_error.Success()); | |
| return m_error.Success(); | |
| } |