Deleted Added
full compact
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}