blob: 229eba5f5d6089050bd3078bd76ae5592ed6ca38 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBValue.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//===----------------------------------------------------------------------===//
9
Eli Friedman7a62c8b2010-06-09 07:44:37 +000010#include "lldb/API/SBValue.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000011#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000012
13#include "lldb/Core/DataExtractor.h"
Caroline Tice7826c882010-10-26 03:11:13 +000014#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000015#include "lldb/Core/Module.h"
16#include "lldb/Core/Stream.h"
17#include "lldb/Core/StreamFile.h"
18#include "lldb/Core/Value.h"
19#include "lldb/Core/ValueObject.h"
Enrico Granata979e20d2011-07-29 19:53:35 +000020#include "lldb/Core/ValueObjectConstResult.h"
Chris Lattner24943d22010-06-08 16:52:24 +000021#include "lldb/Symbol/Block.h"
22#include "lldb/Symbol/ObjectFile.h"
23#include "lldb/Symbol/Variable.h"
24#include "lldb/Target/ExecutionContext.h"
25#include "lldb/Target/Process.h"
26#include "lldb/Target/StackFrame.h"
Greg Claytonbdcda462010-12-20 20:49:23 +000027#include "lldb/Target/Target.h"
Chris Lattner24943d22010-06-08 16:52:24 +000028#include "lldb/Target/Thread.h"
29
Eli Friedman7a62c8b2010-06-09 07:44:37 +000030#include "lldb/API/SBProcess.h"
31#include "lldb/API/SBTarget.h"
32#include "lldb/API/SBThread.h"
33#include "lldb/API/SBFrame.h"
34#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000035
36using namespace lldb;
37using namespace lldb_private;
38
39SBValue::SBValue () :
Greg Clayton63094e02010-06-23 01:19:29 +000040 m_opaque_sp ()
Chris Lattner24943d22010-06-08 16:52:24 +000041{
42}
43
44SBValue::SBValue (const lldb::ValueObjectSP &value_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000045 m_opaque_sp (value_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000046{
47}
48
Greg Clayton538eb822010-11-05 23:17:00 +000049SBValue::SBValue(const SBValue &rhs) :
50 m_opaque_sp (rhs.m_opaque_sp)
51{
52}
53
54const SBValue &
55SBValue::operator = (const SBValue &rhs)
56{
57 if (this != &rhs)
58 m_opaque_sp = rhs.m_opaque_sp;
59 return *this;
60}
61
Chris Lattner24943d22010-06-08 16:52:24 +000062SBValue::~SBValue()
63{
64}
65
66bool
67SBValue::IsValid () const
68{
Greg Clayton49ce6822010-10-31 03:01:06 +000069 // If this function ever changes to anything that does more than just
70 // check if the opaque shared pointer is non NULL, then we need to update
71 // all "if (m_opaque_sp)" code in this file.
72 return m_opaque_sp.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000073}
74
Greg Claytonc5f728c2010-10-06 22:10:17 +000075SBError
76SBValue::GetError()
77{
78 SBError sb_error;
79
80 if (m_opaque_sp.get())
81 sb_error.SetError(m_opaque_sp->GetError());
82
83 return sb_error;
84}
85
Johnny Chen968958c2011-07-07 20:46:23 +000086user_id_t
87SBValue::GetID()
88{
89 if (m_opaque_sp)
90 return m_opaque_sp->GetID();
91 return LLDB_INVALID_UID;
92}
93
Chris Lattner24943d22010-06-08 16:52:24 +000094const char *
95SBValue::GetName()
96{
Greg Clayton49ce6822010-10-31 03:01:06 +000097
98 const char *name = NULL;
99 if (m_opaque_sp)
100 name = m_opaque_sp->GetName().GetCString();
101
Greg Claytone005f2c2010-11-06 01:53:30 +0000102 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000103 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000104 {
105 if (name)
106 log->Printf ("SBValue(%p)::GetName () => \"%s\"", m_opaque_sp.get(), name);
107 else
108 log->Printf ("SBValue(%p)::GetName () => NULL", m_opaque_sp.get(), name);
109 }
Caroline Tice7826c882010-10-26 03:11:13 +0000110
Greg Clayton49ce6822010-10-31 03:01:06 +0000111 return name;
Chris Lattner24943d22010-06-08 16:52:24 +0000112}
113
114const char *
115SBValue::GetTypeName ()
116{
Greg Clayton49ce6822010-10-31 03:01:06 +0000117 const char *name = NULL;
118 if (m_opaque_sp)
119 name = m_opaque_sp->GetTypeName().GetCString();
Greg Claytone005f2c2010-11-06 01:53:30 +0000120 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000121 if (log)
122 {
123 if (name)
124 log->Printf ("SBValue(%p)::GetTypeName () => \"%s\"", m_opaque_sp.get(), name);
125 else
126 log->Printf ("SBValue(%p)::GetTypeName () => NULL", m_opaque_sp.get());
127 }
128
129 return name;
Chris Lattner24943d22010-06-08 16:52:24 +0000130}
131
132size_t
133SBValue::GetByteSize ()
134{
135 size_t result = 0;
136
Greg Clayton49ce6822010-10-31 03:01:06 +0000137 if (m_opaque_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000138 result = m_opaque_sp->GetByteSize();
Chris Lattner24943d22010-06-08 16:52:24 +0000139
Greg Claytone005f2c2010-11-06 01:53:30 +0000140 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000141 if (log)
142 log->Printf ("SBValue(%p)::GetByteSize () => %zu", m_opaque_sp.get(), result);
143
Chris Lattner24943d22010-06-08 16:52:24 +0000144 return result;
145}
146
147bool
Greg Claytonbdcda462010-12-20 20:49:23 +0000148SBValue::IsInScope (const SBFrame &sb_frame)
Chris Lattner24943d22010-06-08 16:52:24 +0000149{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000150 return IsInScope();
151}
152
153bool
154SBValue::IsInScope ()
155{
Chris Lattner24943d22010-06-08 16:52:24 +0000156 bool result = false;
157
Greg Clayton49ce6822010-10-31 03:01:06 +0000158 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000159 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000160 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000161 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000162 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000163 result = m_opaque_sp->IsInScope ();
164 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000165 }
Chris Lattner24943d22010-06-08 16:52:24 +0000166
Greg Claytone005f2c2010-11-06 01:53:30 +0000167 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000168 if (log)
169 log->Printf ("SBValue(%p)::IsInScope () => %i", m_opaque_sp.get(), result);
170
Chris Lattner24943d22010-06-08 16:52:24 +0000171 return result;
172}
173
174const char *
Greg Claytonbdcda462010-12-20 20:49:23 +0000175SBValue::GetValue (const SBFrame &sb_frame)
Chris Lattner24943d22010-06-08 16:52:24 +0000176{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000177 return GetValue();
178}
179
180const char *
181SBValue::GetValue ()
182{
Greg Clayton49ce6822010-10-31 03:01:06 +0000183 const char *cstr = NULL;
Greg Claytonbdcda462010-12-20 20:49:23 +0000184 if (m_opaque_sp)
185 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000186 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000187 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000188 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000189 cstr = m_opaque_sp->GetValueAsCString ();
190 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000191 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000192 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000193 if (log)
194 {
195 if (cstr)
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000196 log->Printf ("SBValue(%p)::GetValue => \"%s\"", m_opaque_sp.get(), cstr);
Greg Clayton49ce6822010-10-31 03:01:06 +0000197 else
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000198 log->Printf ("SBValue(%p)::GetValue => NULL", m_opaque_sp.get());
Greg Clayton49ce6822010-10-31 03:01:06 +0000199 }
200
201 return cstr;
Chris Lattner24943d22010-06-08 16:52:24 +0000202}
203
Greg Claytonf3d0b0c2010-10-27 03:32:59 +0000204ValueType
205SBValue::GetValueType ()
206{
Greg Clayton49ce6822010-10-31 03:01:06 +0000207 ValueType result = eValueTypeInvalid;
Greg Claytonf3d0b0c2010-10-27 03:32:59 +0000208 if (m_opaque_sp)
Greg Clayton49ce6822010-10-31 03:01:06 +0000209 result = m_opaque_sp->GetValueType();
Greg Claytone005f2c2010-11-06 01:53:30 +0000210 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000211 if (log)
212 {
213 switch (result)
214 {
215 case eValueTypeInvalid: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeInvalid", m_opaque_sp.get()); break;
216 case eValueTypeVariableGlobal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableGlobal", m_opaque_sp.get()); break;
217 case eValueTypeVariableStatic: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableStatic", m_opaque_sp.get()); break;
218 case eValueTypeVariableArgument:log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableArgument", m_opaque_sp.get()); break;
219 case eValueTypeVariableLocal: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeVariableLocal", m_opaque_sp.get()); break;
220 case eValueTypeRegister: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegister", m_opaque_sp.get()); break;
221 case eValueTypeRegisterSet: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeRegisterSet", m_opaque_sp.get()); break;
222 case eValueTypeConstResult: log->Printf ("SBValue(%p)::GetValueType () => eValueTypeConstResult", m_opaque_sp.get()); break;
223 default: log->Printf ("SBValue(%p)::GetValueType () => %i ???", m_opaque_sp.get(), result); break;
224 }
225 }
226 return result;
Greg Claytonf3d0b0c2010-10-27 03:32:59 +0000227}
228
Jim Ingham4ae51962010-09-10 23:12:17 +0000229const char *
Greg Claytonbdcda462010-12-20 20:49:23 +0000230SBValue::GetObjectDescription (const SBFrame &sb_frame)
Jim Ingham4ae51962010-09-10 23:12:17 +0000231{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000232 return GetObjectDescription ();
233}
234
235const char *
236SBValue::GetObjectDescription ()
237{
Greg Clayton49ce6822010-10-31 03:01:06 +0000238 const char *cstr = NULL;
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000239 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000240 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000241 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000242 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000243 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000244 cstr = m_opaque_sp->GetObjectDescription ();
245 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000246 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000247 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000248 if (log)
249 {
250 if (cstr)
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000251 log->Printf ("SBValue(%p)::GetObjectDescription => \"%s\"", m_opaque_sp.get(), cstr);
Greg Clayton49ce6822010-10-31 03:01:06 +0000252 else
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000253 log->Printf ("SBValue(%p)::GetObjectDescription => NULL", m_opaque_sp.get());
Greg Clayton49ce6822010-10-31 03:01:06 +0000254 }
255 return cstr;
Jim Ingham4ae51962010-09-10 23:12:17 +0000256}
257
Chris Lattner24943d22010-06-08 16:52:24 +0000258bool
Greg Claytonbdcda462010-12-20 20:49:23 +0000259SBValue::GetValueDidChange (const SBFrame &sb_frame)
Chris Lattner24943d22010-06-08 16:52:24 +0000260{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000261 return GetValueDidChange ();
262}
263
Enrico Granata979e20d2011-07-29 19:53:35 +0000264SBType
265SBValue::GetType()
266{
267 SBType result;
268 if (m_opaque_sp)
269 {
270 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
271 {
272 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
273 result = SBType(m_opaque_sp->GetClangAST(),
274 m_opaque_sp->GetClangType());
275 }
276 }
277 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
278 if (log)
279 {
280 if (result.IsValid())
281 log->Printf ("SBValue(%p)::GetType => %p", m_opaque_sp.get(), &result);
282 else
283 log->Printf ("SBValue(%p)::GetType => NULL", m_opaque_sp.get());
284 }
285 return result;
286}
287
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000288bool
289SBValue::GetValueDidChange ()
290{
Greg Clayton49ce6822010-10-31 03:01:06 +0000291 bool result = false;
292 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000293 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000294 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000295 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000296 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000297 result = m_opaque_sp->GetValueDidChange ();
298 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000299 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000300 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000301 if (log)
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000302 log->Printf ("SBValue(%p)::GetValueDidChange => %i", m_opaque_sp.get(), result);
Greg Clayton49ce6822010-10-31 03:01:06 +0000303
304 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000305}
306
307const char *
Greg Claytonbdcda462010-12-20 20:49:23 +0000308SBValue::GetSummary (const SBFrame &sb_frame)
Chris Lattner24943d22010-06-08 16:52:24 +0000309{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000310 return GetSummary ();
311}
312
313const char *
314SBValue::GetSummary ()
315{
Greg Clayton49ce6822010-10-31 03:01:06 +0000316 const char *cstr = NULL;
317 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000318 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000319 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000320 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000321 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000322 cstr = m_opaque_sp->GetSummaryAsCString();
323 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000324 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000325 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000326 if (log)
327 {
328 if (cstr)
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000329 log->Printf ("SBValue(%p)::GetSummary => \"%s\"", m_opaque_sp.get(), cstr);
Greg Clayton49ce6822010-10-31 03:01:06 +0000330 else
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000331 log->Printf ("SBValue(%p)::GetSummary => NULL", m_opaque_sp.get());
Greg Clayton49ce6822010-10-31 03:01:06 +0000332 }
333 return cstr;
Chris Lattner24943d22010-06-08 16:52:24 +0000334}
335
336const char *
Greg Claytonbdcda462010-12-20 20:49:23 +0000337SBValue::GetLocation (const SBFrame &sb_frame)
Chris Lattner24943d22010-06-08 16:52:24 +0000338{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000339 return GetLocation ();
340}
341
342const char *
343SBValue::GetLocation ()
344{
Greg Clayton49ce6822010-10-31 03:01:06 +0000345 const char *cstr = NULL;
346 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000347 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000348 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000349 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000350 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000351 cstr = m_opaque_sp->GetLocationAsCString();
352 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000353 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000354 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000355 if (log)
356 {
357 if (cstr)
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000358 log->Printf ("SBValue(%p)::GetSummary => \"%s\"", m_opaque_sp.get(), cstr);
Greg Clayton49ce6822010-10-31 03:01:06 +0000359 else
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000360 log->Printf ("SBValue(%p)::GetSummary => NULL", m_opaque_sp.get());
Greg Clayton49ce6822010-10-31 03:01:06 +0000361 }
362 return cstr;
Chris Lattner24943d22010-06-08 16:52:24 +0000363}
364
365bool
Greg Claytonbdcda462010-12-20 20:49:23 +0000366SBValue::SetValueFromCString (const SBFrame &sb_frame, const char *value_str)
Chris Lattner24943d22010-06-08 16:52:24 +0000367{
Jim Inghamfa3a16a2011-03-31 00:19:25 +0000368 return SetValueFromCString (value_str);
369}
370
371bool
372SBValue::SetValueFromCString (const char *value_str)
373{
Chris Lattner24943d22010-06-08 16:52:24 +0000374 bool success = false;
Greg Clayton49ce6822010-10-31 03:01:06 +0000375 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000376 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000377 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000378 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000379 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000380 success = m_opaque_sp->SetValueFromCString (value_str);
381 }
Greg Claytonbdcda462010-12-20 20:49:23 +0000382 }
Chris Lattner24943d22010-06-08 16:52:24 +0000383 return success;
384}
385
Enrico Granata979e20d2011-07-29 19:53:35 +0000386lldb::SBValue
387SBValue::CreateChildAtOffset (const char *name, uint32_t offset, const SBType& type)
388{
389 lldb::SBValue result;
390 if (m_opaque_sp)
391 {
392 if (type.IsValid())
393 {
394 result = SBValue(m_opaque_sp->GetSyntheticChildAtOffset(offset, *type.m_opaque_ap->GetClangASTType(), true));
395 result.m_opaque_sp->SetName(ConstString(name));
396 }
397 }
398 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
399 if (log)
400 {
401 if (result.IsValid())
402 log->Printf ("SBValue(%p)::GetChildAtOffset => \"%s\"", m_opaque_sp.get(), result.m_opaque_sp.get());
403 else
404 log->Printf ("SBValue(%p)::GetChildAtOffset => NULL", m_opaque_sp.get());
405 }
406 return result;
407}
408
409lldb::SBValue
410SBValue::Cast(const SBType& type)
411{
412 return CreateChildAtOffset(m_opaque_sp->GetName().GetCString(), 0, type);
413}
414
415lldb::SBValue
416SBValue::CreateValueFromExpression (const char *name, const char* expression)
417{
418 lldb::SBValue result;
419 if (m_opaque_sp)
420 {
421 ValueObjectSP result_valobj_sp;
422 m_opaque_sp->GetUpdatePoint().GetTargetSP()->EvaluateExpression(expression,
423 m_opaque_sp->GetUpdatePoint().GetExecutionContextScope()->CalculateStackFrame(),
424 true, true, eNoDynamicValues,
425 result_valobj_sp);
426 result_valobj_sp->SetName(ConstString(name));
427 result = SBValue(result_valobj_sp);
428 }
429 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
430 if (log)
431 {
432 if (result.IsValid())
433 log->Printf ("SBValue(%p)::GetChildFromExpression => \"%s\"", m_opaque_sp.get(), result.m_opaque_sp.get());
434 else
435 log->Printf ("SBValue(%p)::GetChildFromExpression => NULL", m_opaque_sp.get());
436 }
437 return result;
438}
439
440lldb::SBValue
441SBValue::CreateValueFromAddress(const char* name, lldb::addr_t address, const SBType& type)
442{
443 lldb::SBValue result;
444 if (m_opaque_sp)
445 {
446
447 SBType real_type(type.GetPointerType());
448
449 lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t)));
450
451 ValueObjectSP result_valobj_sp(ValueObjectConstResult::Create(m_opaque_sp->GetUpdatePoint().GetExecutionContextScope(),
452 real_type.m_opaque_ap->GetASTContext(),
453 real_type.m_opaque_ap->GetOpaqueQualType(),
454 ConstString(name),
455 buffer,
456 lldb::endian::InlHostByteOrder(),
457 GetTarget().GetProcess().GetAddressByteSize()));
458
459 result_valobj_sp->SetName(ConstString(name));
460 result = SBValue(result_valobj_sp);
461 }
462 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
463 if (log)
464 {
465 if (result.IsValid())
466 log->Printf ("SBValue(%p)::GetChildFromAddress => \"%s\"", m_opaque_sp.get(), result.m_opaque_sp.get());
467 else
468 log->Printf ("SBValue(%p)::GetChildFromAddress => NULL", m_opaque_sp.get());
469 }
470 return result;
471}
472
Chris Lattner24943d22010-06-08 16:52:24 +0000473SBValue
474SBValue::GetChildAtIndex (uint32_t idx)
475{
Greg Clayton8f64c472011-07-15 19:31:49 +0000476 const bool can_create_synthetic = false;
477 lldb::DynamicValueType use_dynamic = eNoDynamicValues;
Johnny Chen446ccaa2011-06-29 21:19:39 +0000478 if (m_opaque_sp)
Enrico Granata979e20d2011-07-29 19:53:35 +0000479 use_dynamic = m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetPreferDynamicValue();
Greg Clayton8f64c472011-07-15 19:31:49 +0000480 return GetChildAtIndex (idx, use_dynamic, can_create_synthetic);
Jim Inghame41494a2011-04-16 00:01:13 +0000481}
482
483SBValue
Greg Clayton8f64c472011-07-15 19:31:49 +0000484SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic, bool can_create_synthetic)
Jim Inghame41494a2011-04-16 00:01:13 +0000485{
Chris Lattner24943d22010-06-08 16:52:24 +0000486 lldb::ValueObjectSP child_sp;
487
Greg Clayton49ce6822010-10-31 03:01:06 +0000488 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000489 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000490 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000491 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000492 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Clayton8f64c472011-07-15 19:31:49 +0000493 const bool can_create = true;
494 child_sp = m_opaque_sp->GetChildAtIndex (idx, can_create);
495 if (can_create_synthetic && !child_sp)
Greg Claytonfab305b2011-05-20 23:51:26 +0000496 {
Greg Clayton8f64c472011-07-15 19:31:49 +0000497 if (m_opaque_sp->IsPointerType())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000498 {
Greg Clayton8f64c472011-07-15 19:31:49 +0000499 child_sp = m_opaque_sp->GetSyntheticArrayMemberFromPointer(idx, can_create);
500 }
501 else if (m_opaque_sp->IsArrayType())
502 {
503 child_sp = m_opaque_sp->GetSyntheticArrayMemberFromArray(idx, can_create);
504 }
505 }
506
507 if (child_sp)
508 {
509 if (use_dynamic != lldb::eNoDynamicValues)
510 {
511 lldb::ValueObjectSP dynamic_sp(child_sp->GetDynamicValue (use_dynamic));
Greg Claytonb9dcc512011-06-29 18:28:50 +0000512 if (dynamic_sp)
513 child_sp = dynamic_sp;
514 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000515 }
Jim Inghame41494a2011-04-16 00:01:13 +0000516 }
517 }
518
Chris Lattner24943d22010-06-08 16:52:24 +0000519 SBValue sb_value (child_sp);
Greg Claytone005f2c2010-11-06 01:53:30 +0000520 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000521 if (log)
522 log->Printf ("SBValue(%p)::GetChildAtIndex (%u) => SBValue(%p)", m_opaque_sp.get(), idx, sb_value.get());
523
Chris Lattner24943d22010-06-08 16:52:24 +0000524 return sb_value;
525}
526
527uint32_t
528SBValue::GetIndexOfChildWithName (const char *name)
529{
Greg Clayton49ce6822010-10-31 03:01:06 +0000530 uint32_t idx = UINT32_MAX;
531 if (m_opaque_sp)
Greg Claytonfab305b2011-05-20 23:51:26 +0000532 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000533 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000534 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000535 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonfab305b2011-05-20 23:51:26 +0000536
Greg Claytonb9dcc512011-06-29 18:28:50 +0000537 idx = m_opaque_sp->GetIndexOfChildWithName (ConstString(name));
538 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000539 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000540 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000541 if (log)
542 {
543 if (idx == UINT32_MAX)
544 log->Printf ("SBValue(%p)::GetIndexOfChildWithName (name=\"%s\") => NOT FOUND", m_opaque_sp.get(), name, idx);
545 else
546 log->Printf ("SBValue(%p)::GetIndexOfChildWithName (name=\"%s\") => %u", m_opaque_sp.get(), name, idx);
547 }
548 return idx;
Chris Lattner24943d22010-06-08 16:52:24 +0000549}
550
551SBValue
552SBValue::GetChildMemberWithName (const char *name)
553{
Johnny Chen446ccaa2011-06-29 21:19:39 +0000554 if (m_opaque_sp)
555 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000556 lldb::DynamicValueType use_dynamic_value = m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetPreferDynamicValue();
Johnny Chen446ccaa2011-06-29 21:19:39 +0000557 return GetChildMemberWithName (name, use_dynamic_value);
558 }
559 else
560 return GetChildMemberWithName (name, eNoDynamicValues);
Jim Inghame41494a2011-04-16 00:01:13 +0000561}
562
563SBValue
Jim Ingham10de7d12011-05-04 03:43:18 +0000564SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic_value)
Jim Inghame41494a2011-04-16 00:01:13 +0000565{
Chris Lattner24943d22010-06-08 16:52:24 +0000566 lldb::ValueObjectSP child_sp;
567 const ConstString str_name (name);
568
Greg Clayton905acaf2011-05-20 22:07:17 +0000569
Greg Clayton49ce6822010-10-31 03:01:06 +0000570 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000571 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000572 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Jim Inghame41494a2011-04-16 00:01:13 +0000573 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000574 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonb9dcc512011-06-29 18:28:50 +0000575 child_sp = m_opaque_sp->GetChildMemberWithName (str_name, true);
576 if (use_dynamic_value != lldb::eNoDynamicValues)
Greg Claytonfab305b2011-05-20 23:51:26 +0000577 {
Greg Claytonb9dcc512011-06-29 18:28:50 +0000578 if (child_sp)
579 {
580 lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic_value);
581 if (dynamic_sp)
582 child_sp = dynamic_sp;
583 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000584 }
Jim Inghame41494a2011-04-16 00:01:13 +0000585 }
586 }
587
Chris Lattner24943d22010-06-08 16:52:24 +0000588 SBValue sb_value (child_sp);
Greg Clayton49ce6822010-10-31 03:01:06 +0000589
Greg Claytone005f2c2010-11-06 01:53:30 +0000590 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000591 if (log)
592 log->Printf ("SBValue(%p)::GetChildMemberWithName (name=\"%s\") => SBValue(%p)", m_opaque_sp.get(), name, sb_value.get());
593
Chris Lattner24943d22010-06-08 16:52:24 +0000594 return sb_value;
595}
596
Enrico Granataf7a9b142011-07-15 02:26:42 +0000597lldb::SBValue
598SBValue::GetValueForExpressionPath(const char* expr_path)
599{
600 lldb::ValueObjectSP child_sp;
601 if (m_opaque_sp)
602 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000603 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Enrico Granataf7a9b142011-07-15 02:26:42 +0000604 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000605 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Enrico Granataf7a9b142011-07-15 02:26:42 +0000606 // using default values for all the fancy options, just do it if you can
607 child_sp = m_opaque_sp->GetValueForExpressionPath(expr_path);
608 }
609 }
610
611 SBValue sb_value (child_sp);
612
613 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
614 if (log)
615 log->Printf ("SBValue(%p)::GetValueForExpressionPath (expr_path=\"%s\") => SBValue(%p)", m_opaque_sp.get(), expr_path, sb_value.get());
616
617 return sb_value;
618}
Chris Lattner24943d22010-06-08 16:52:24 +0000619
620uint32_t
621SBValue::GetNumChildren ()
622{
623 uint32_t num_children = 0;
624
Greg Clayton49ce6822010-10-31 03:01:06 +0000625 if (m_opaque_sp)
Greg Claytonfab305b2011-05-20 23:51:26 +0000626 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000627 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000628 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000629 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonfab305b2011-05-20 23:51:26 +0000630
Greg Claytonb9dcc512011-06-29 18:28:50 +0000631 num_children = m_opaque_sp->GetNumChildren();
632 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000633 }
Greg Clayton49ce6822010-10-31 03:01:06 +0000634
Greg Claytone005f2c2010-11-06 01:53:30 +0000635 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000636 if (log)
637 log->Printf ("SBValue(%p)::GetNumChildren () => %u", m_opaque_sp.get(), num_children);
Chris Lattner24943d22010-06-08 16:52:24 +0000638
639 return num_children;
640}
641
Chris Lattner24943d22010-06-08 16:52:24 +0000642
643SBValue
644SBValue::Dereference ()
645{
Greg Clayton49ce6822010-10-31 03:01:06 +0000646 SBValue sb_value;
647 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000648 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000649 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000650 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000651 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonfab305b2011-05-20 23:51:26 +0000652
Greg Claytonb9dcc512011-06-29 18:28:50 +0000653 Error error;
654 sb_value = m_opaque_sp->Dereference (error);
655 }
Chris Lattner24943d22010-06-08 16:52:24 +0000656 }
Greg Claytone005f2c2010-11-06 01:53:30 +0000657 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000658 if (log)
659 log->Printf ("SBValue(%p)::Dereference () => SBValue(%p)", m_opaque_sp.get(), sb_value.get());
660
661 return sb_value;
Chris Lattner24943d22010-06-08 16:52:24 +0000662}
663
664bool
Greg Clayton49ce6822010-10-31 03:01:06 +0000665SBValue::TypeIsPointerType ()
Chris Lattner24943d22010-06-08 16:52:24 +0000666{
667 bool is_ptr_type = false;
668
Greg Clayton49ce6822010-10-31 03:01:06 +0000669 if (m_opaque_sp)
Greg Claytonfab305b2011-05-20 23:51:26 +0000670 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000671 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000672 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000673 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonfab305b2011-05-20 23:51:26 +0000674
Greg Claytonb9dcc512011-06-29 18:28:50 +0000675 is_ptr_type = m_opaque_sp->IsPointerType();
676 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000677 }
Greg Clayton49ce6822010-10-31 03:01:06 +0000678
Greg Claytone005f2c2010-11-06 01:53:30 +0000679 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton49ce6822010-10-31 03:01:06 +0000680 if (log)
681 log->Printf ("SBValue(%p)::TypeIsPointerType () => %i", m_opaque_sp.get(), is_ptr_type);
682
Chris Lattner24943d22010-06-08 16:52:24 +0000683
684 return is_ptr_type;
685}
686
Chris Lattner24943d22010-06-08 16:52:24 +0000687void *
688SBValue::GetOpaqueType()
689{
Greg Clayton63094e02010-06-23 01:19:29 +0000690 if (m_opaque_sp)
Greg Claytonfab305b2011-05-20 23:51:26 +0000691 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000692 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
Greg Claytonb9dcc512011-06-29 18:28:50 +0000693 {
Enrico Granata979e20d2011-07-29 19:53:35 +0000694 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
Greg Claytonfab305b2011-05-20 23:51:26 +0000695
Greg Claytonb9dcc512011-06-29 18:28:50 +0000696 return m_opaque_sp->GetClangType();
697 }
Greg Claytonfab305b2011-05-20 23:51:26 +0000698 }
Chris Lattner24943d22010-06-08 16:52:24 +0000699 return NULL;
700}
701
Enrico Granata979e20d2011-07-29 19:53:35 +0000702lldb::SBTarget
703SBValue::GetTarget()
704{
705 SBTarget result;
706 if (m_opaque_sp)
707 {
708 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
709 {
710 result = SBTarget(lldb::TargetSP(m_opaque_sp->GetUpdatePoint().GetTargetSP()));
711 }
712 }
713 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
714 if (log)
715 {
716 if (result.get() == NULL)
717 log->Printf ("SBValue(%p)::GetTarget () => NULL", m_opaque_sp.get());
718 else
719 log->Printf ("SBValue(%p)::GetTarget () => %p", m_opaque_sp.get(), result.get());
720 }
721 return result;
722}
723
724lldb::SBProcess
725SBValue::GetProcess()
726{
727 SBProcess result;
728 if (m_opaque_sp)
729 {
730 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
731 {
732 result = SBProcess(lldb::ProcessSP(m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetProcessSP()));
733 }
734 }
735 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
736 if (log)
737 {
738 if (result.get() == NULL)
739 log->Printf ("SBValue(%p)::GetProcess () => NULL", m_opaque_sp.get());
740 else
741 log->Printf ("SBValue(%p)::GetProcess () => %p", m_opaque_sp.get(), result.get());
742 }
743 return result;
744}
745
746lldb::SBThread
747SBValue::GetThread()
748{
749 SBThread result;
750 if (m_opaque_sp)
751 {
752 if (m_opaque_sp->GetUpdatePoint().GetExecutionContextScope())
753 {
754 result = SBThread(lldb::ThreadSP(m_opaque_sp->GetUpdatePoint().GetExecutionContextScope()->CalculateThread()));
755 }
756 }
757 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
758 if (log)
759 {
760 if (result.get() == NULL)
761 log->Printf ("SBValue(%p)::GetThread () => NULL", m_opaque_sp.get());
762 else
763 log->Printf ("SBValue(%p)::GetThread () => %p", m_opaque_sp.get(), result.get());
764 }
765 return result;
766}
767
768lldb::SBFrame
769SBValue::GetFrame()
770{
771 SBFrame result;
772 if (m_opaque_sp)
773 {
774 if (m_opaque_sp->GetUpdatePoint().GetExecutionContextScope())
775 {
776 result = SBFrame(lldb::StackFrameSP(m_opaque_sp->GetUpdatePoint().GetExecutionContextScope()->CalculateStackFrame()));
777 }
778 }
779 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
780 if (log)
781 {
782 if (result.get() == NULL)
783 log->Printf ("SBValue(%p)::GetFrame () => NULL", m_opaque_sp.get());
784 else
785 log->Printf ("SBValue(%p)::GetFrame () => %p", m_opaque_sp.get(), result.get());
786 }
787 return result;
788}
789
790
Chris Lattner24943d22010-06-08 16:52:24 +0000791// Mimic shared pointer...
792lldb_private::ValueObject *
793SBValue::get() const
794{
Greg Clayton63094e02010-06-23 01:19:29 +0000795 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000796}
797
798lldb_private::ValueObject *
799SBValue::operator->() const
800{
Greg Clayton63094e02010-06-23 01:19:29 +0000801 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000802}
803
804lldb::ValueObjectSP &
805SBValue::operator*()
806{
Greg Clayton63094e02010-06-23 01:19:29 +0000807 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000808}
809
810const lldb::ValueObjectSP &
811SBValue::operator*() const
812{
Greg Clayton63094e02010-06-23 01:19:29 +0000813 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000814}
Caroline Tice98f930f2010-09-20 05:20:02 +0000815
816bool
Greg Clayton49ce6822010-10-31 03:01:06 +0000817SBValue::GetExpressionPath (SBStream &description)
818{
819 if (m_opaque_sp)
820 {
Greg Claytonb01000f2011-01-17 03:46:26 +0000821 m_opaque_sp->GetExpressionPath (description.ref(), false);
822 return true;
823 }
824 return false;
825}
826
827bool
828SBValue::GetExpressionPath (SBStream &description, bool qualify_cxx_base_classes)
829{
830 if (m_opaque_sp)
831 {
832 m_opaque_sp->GetExpressionPath (description.ref(), qualify_cxx_base_classes);
Greg Clayton49ce6822010-10-31 03:01:06 +0000833 return true;
834 }
835 return false;
836}
837
838bool
Caroline Tice98f930f2010-09-20 05:20:02 +0000839SBValue::GetDescription (SBStream &description)
840{
841 if (m_opaque_sp)
842 {
Greg Claytonbafc86e2011-07-06 16:49:27 +0000843 uint32_t ptr_depth = 0;
844 uint32_t curr_depth = 0;
845 uint32_t max_depth = UINT32_MAX;
846 bool show_types = false;
847 bool show_location = false;
848 bool use_objc = false;
849 lldb::DynamicValueType use_dynamic = eNoDynamicValues;
850 bool scope_already_checked = false;
851 bool flat_output = false;
Enrico Granatae4e3e2c2011-07-22 00:16:08 +0000852 bool use_synthetic = true;
853 uint32_t no_summary_depth = 0;
Greg Claytonbafc86e2011-07-06 16:49:27 +0000854 ValueObject::DumpValueObject (description.ref(),
855 m_opaque_sp.get(),
856 m_opaque_sp->GetName().GetCString(),
857 ptr_depth,
858 curr_depth,
859 max_depth,
860 show_types, show_location,
861 use_objc,
Enrico Granatae4e3e2c2011-07-22 00:16:08 +0000862 use_dynamic,
863 use_synthetic,
Greg Claytonbafc86e2011-07-06 16:49:27 +0000864 scope_already_checked,
Enrico Granata7f163b32011-07-16 01:22:04 +0000865 flat_output,
Enrico Granatae4e3e2c2011-07-22 00:16:08 +0000866 no_summary_depth);
Caroline Tice98f930f2010-09-20 05:20:02 +0000867 }
868 else
869 description.Printf ("No value");
870
871 return true;
872}
Greg Claytone179a582011-01-05 18:43:15 +0000873
874lldb::Format
875SBValue::GetFormat () const
876{
877 if (m_opaque_sp)
878 return m_opaque_sp->GetFormat();
879 return eFormatDefault;
880}
881
882void
883SBValue::SetFormat (lldb::Format format)
884{
885 if (m_opaque_sp)
886 m_opaque_sp->SetFormat(format);
887}
888
Enrico Granata979e20d2011-07-29 19:53:35 +0000889lldb::SBValue
890SBValue::AddressOf()
891{
892 SBValue sb_value;
893 if (m_opaque_sp)
894 {
895 if (m_opaque_sp->GetUpdatePoint().GetTargetSP())
896 {
897 Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
898
899 Error error;
900 sb_value = m_opaque_sp->AddressOf (error);
901 }
902 }
903 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
904 if (log)
905 log->Printf ("SBValue(%p)::GetPointerToObject () => SBValue(%p)", m_opaque_sp.get(), sb_value.get());
906
907 return sb_value;
908}