ValueObjectConstResultImpl.cpp (276479) | ValueObjectConstResultImpl.cpp (280031) |
---|---|
1//===-- ValueObjectConstResultImpl.cpp ---------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 16 unchanged lines hidden (view full) --- 25 26#include "lldb/Target/ExecutionContext.h" 27#include "lldb/Target/Process.h" 28#include "lldb/Target/Target.h" 29 30using namespace lldb; 31using namespace lldb_private; 32 | 1//===-- ValueObjectConstResultImpl.cpp ---------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 16 unchanged lines hidden (view full) --- 25 26#include "lldb/Target/ExecutionContext.h" 27#include "lldb/Target/Process.h" 28#include "lldb/Target/Target.h" 29 30using namespace lldb; 31using namespace lldb_private; 32 |
33// this macro enables a simpler implementation for some method calls in this object that relies only upon 34// ValueObject knowing how to set the address type of its children correctly. the alternative implementation 35// relies on being able to create a target copy of the frozen object, which makes it less bug-prone but less 36// efficient as well. once we are confident the faster implementation is bug-free, this macro (and the slower 37// implementations) can go 38#define TRIVIAL_IMPL 1 39 | |
40ValueObjectConstResultImpl::ValueObjectConstResultImpl (ValueObject* valobj, 41 lldb::addr_t live_address) : 42 m_impl_backend(valobj), 43 m_live_address(live_address), 44 m_live_address_type(eAddressTypeLoad), 45 m_load_addr_backend(), 46 m_address_of_backend() 47{ 48} 49 50lldb::ValueObjectSP | 33ValueObjectConstResultImpl::ValueObjectConstResultImpl (ValueObject* valobj, 34 lldb::addr_t live_address) : 35 m_impl_backend(valobj), 36 m_live_address(live_address), 37 m_live_address_type(eAddressTypeLoad), 38 m_load_addr_backend(), 39 m_address_of_backend() 40{ 41} 42 43lldb::ValueObjectSP |
51ValueObjectConstResultImpl::DerefOnTarget() 52{ 53 if (m_load_addr_backend.get() == NULL) 54 { 55 lldb::addr_t tgt_address = m_impl_backend->GetPointerValue(); 56 ExecutionContext exe_ctx (m_impl_backend->GetExecutionContextRef()); 57 m_load_addr_backend = ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(), 58 m_impl_backend->GetClangType(), 59 m_impl_backend->GetName(), 60 tgt_address, 61 eAddressTypeLoad, 62 exe_ctx.GetAddressByteSize()); 63 } 64 return m_load_addr_backend; 65} 66 67lldb::ValueObjectSP | |
68ValueObjectConstResultImpl::Dereference (Error &error) 69{ 70 if (m_impl_backend == NULL) 71 return lldb::ValueObjectSP(); 72 | 44ValueObjectConstResultImpl::Dereference (Error &error) 45{ 46 if (m_impl_backend == NULL) 47 return lldb::ValueObjectSP(); 48 |
73#if defined (TRIVIAL_IMPL) && TRIVIAL_IMPL == 1 | |
74 return m_impl_backend->ValueObject::Dereference(error); | 49 return m_impl_backend->ValueObject::Dereference(error); |
75#else 76 m_impl_backend->UpdateValueIfNeeded(false); 77 78 if (NeedsDerefOnTarget()) 79 return DerefOnTarget()->Dereference(error); 80 else 81 return m_impl_backend->ValueObject::Dereference(error); 82#endif | |
83} 84 85ValueObject * 86ValueObjectConstResultImpl::CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index) 87{ 88 if (m_impl_backend == NULL) 89 return NULL; 90 --- 43 unchanged lines hidden (view full) --- 134 child_clang_type, 135 child_name, 136 child_byte_size, 137 child_byte_offset, 138 child_bitfield_bit_size, 139 child_bitfield_bit_offset, 140 child_is_base_class, 141 child_is_deref_of_parent); | 50} 51 52ValueObject * 53ValueObjectConstResultImpl::CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index) 54{ 55 if (m_impl_backend == NULL) 56 return NULL; 57 --- 43 unchanged lines hidden (view full) --- 101 child_clang_type, 102 child_name, 103 child_byte_size, 104 child_byte_offset, 105 child_bitfield_bit_size, 106 child_bitfield_bit_offset, 107 child_is_base_class, 108 child_is_deref_of_parent); |
142 valobj->m_impl.SetLiveAddress(m_live_address+child_byte_offset); | 109 if (m_live_address != LLDB_INVALID_ADDRESS) 110 valobj->m_impl.SetLiveAddress(m_live_address+child_byte_offset); |
143 } 144 145 return valobj; 146} 147 148lldb::ValueObjectSP 149ValueObjectConstResultImpl::GetSyntheticChildAtOffset (uint32_t offset, const ClangASTType& type, bool can_create) 150{ 151 if (m_impl_backend == NULL) 152 return lldb::ValueObjectSP(); 153 | 111 } 112 113 return valobj; 114} 115 116lldb::ValueObjectSP 117ValueObjectConstResultImpl::GetSyntheticChildAtOffset (uint32_t offset, const ClangASTType& type, bool can_create) 118{ 119 if (m_impl_backend == NULL) 120 return lldb::ValueObjectSP(); 121 |
154#if defined (TRIVIAL_IMPL) && TRIVIAL_IMPL == 1 | |
155 return m_impl_backend->ValueObject::GetSyntheticChildAtOffset(offset, type, can_create); | 122 return m_impl_backend->ValueObject::GetSyntheticChildAtOffset(offset, type, can_create); |
156#else 157 m_impl_backend->UpdateValueIfNeeded(false); 158 159 if (NeedsDerefOnTarget()) 160 return DerefOnTarget()->GetSyntheticChildAtOffset(offset, type, can_create); 161 else 162 return m_impl_backend->ValueObject::GetSyntheticChildAtOffset(offset, type, can_create); 163#endif | |
164} 165 166lldb::ValueObjectSP 167ValueObjectConstResultImpl::AddressOf (Error &error) 168{ 169 if (m_address_of_backend.get() != NULL) 170 return m_address_of_backend; 171 --- 16 unchanged lines hidden (view full) --- 188 exe_ctx.GetAddressByteSize()); 189 190 m_address_of_backend->GetValue().SetValueType(Value::eValueTypeScalar); 191 m_address_of_backend->GetValue().GetScalar() = m_live_address; 192 193 return m_address_of_backend; 194 } 195 else | 123} 124 125lldb::ValueObjectSP 126ValueObjectConstResultImpl::AddressOf (Error &error) 127{ 128 if (m_address_of_backend.get() != NULL) 129 return m_address_of_backend; 130 --- 16 unchanged lines hidden (view full) --- 147 exe_ctx.GetAddressByteSize()); 148 149 m_address_of_backend->GetValue().SetValueType(Value::eValueTypeScalar); 150 m_address_of_backend->GetValue().GetScalar() = m_live_address; 151 152 return m_address_of_backend; 153 } 154 else |
196 return lldb::ValueObjectSP(); | 155 return m_impl_backend->ValueObject::AddressOf(error); |
197} 198 199lldb::addr_t 200ValueObjectConstResultImpl::GetAddressOf (bool scalar_is_load_address, 201 AddressType *address_type) 202{ 203 204 if (m_impl_backend == NULL) --- 13 unchanged lines hidden (view full) --- 218 219size_t 220ValueObjectConstResultImpl::GetPointeeData (DataExtractor& data, 221 uint32_t item_idx, 222 uint32_t item_count) 223{ 224 if (m_impl_backend == NULL) 225 return 0; | 156} 157 158lldb::addr_t 159ValueObjectConstResultImpl::GetAddressOf (bool scalar_is_load_address, 160 AddressType *address_type) 161{ 162 163 if (m_impl_backend == NULL) --- 13 unchanged lines hidden (view full) --- 177 178size_t 179ValueObjectConstResultImpl::GetPointeeData (DataExtractor& data, 180 uint32_t item_idx, 181 uint32_t item_count) 182{ 183 if (m_impl_backend == NULL) 184 return 0; |
226#if defined (TRIVIAL_IMPL) && TRIVIAL_IMPL == 1 | |
227 return m_impl_backend->ValueObject::GetPointeeData(data, item_idx, item_count); | 185 return m_impl_backend->ValueObject::GetPointeeData(data, item_idx, item_count); |
228#else 229 m_impl_backend->UpdateValueIfNeeded(false); 230 231 if (NeedsDerefOnTarget() && m_impl_backend->IsPointerType()) 232 return DerefOnTarget()->GetPointeeData(data, item_idx, item_count); 233 else 234 return m_impl_backend->ValueObject::GetPointeeData(data, item_idx, item_count); 235#endif | |
236} | 186} |