SBValue.cpp revision e49ec18f1868168c8927ae30a379db176ca8cce3
1c3aae25116e66c177579b0b79182b09340b19753Chris Lattner//===-- SBValue.cpp ---------------------------------------------*- C++ -*-===//
2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman//
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//                     The LLVM Compiler Infrastructure
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//
56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// This file is distributed under the University of Illinois Open Source
66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// License. See LICENSE.TXT for details.
7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman//
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===//
9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman
10c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBValue.h"
11c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBStream.h"
12ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman
13cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/DataExtractor.h"
14cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Module.h"
15cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Stream.h"
16cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/StreamFile.h"
17cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Value.h"
18c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Core/ValueObject.h"
19cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Symbol/Block.h"
20c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Symbol/ObjectFile.h"
21d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "lldb/Symbol/Variable.h"
22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "lldb/Target/ExecutionContext.h"
23c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/Process.h"
24c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/StackFrame.h"
25c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/Thread.h"
26c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
27c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBProcess.h"
28c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBTarget.h"
29c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBThread.h"
30c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBFrame.h"
31c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBDebugger.h"
32c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
33c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerusing namespace lldb;
34c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerusing namespace lldb_private;
35c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
36c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::SBValue () :
37cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    m_opaque_sp ()
38cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{
39063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner}
40c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
41cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::SBValue (const lldb::ValueObjectSP &value_sp) :
42c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    m_opaque_sp (value_sp)
43c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
44cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner}
45cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
46c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::~SBValue()
47691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth{
48691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth}
49691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth
50691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharthbool
51cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::IsValid () const
52063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner{
53c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    return  (m_opaque_sp.get() != NULL);
54c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
55cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
56cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerconst char *
57c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetName()
58063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner{
59063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner    if (IsValid())
60cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner        return m_opaque_sp->GetName().AsCString();
611080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner    else
621080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        return NULL;
631080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner}
641080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner
651080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattnerconst char *
661080b9ee534579c67f7c99364cc6fa11edbcd919Chris LattnerSBValue::GetTypeName ()
671080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner{
681080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner    if (IsValid())
69ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman        return m_opaque_sp->GetTypeName().AsCString();
70c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    else
71cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner        return NULL;
72c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
73cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
74c3aae25116e66c177579b0b79182b09340b19753Chris Lattnersize_t
75c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetByteSize ()
76c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
77cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    size_t result = 0;
78c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
79cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    if (IsValid())
80c3aae25116e66c177579b0b79182b09340b19753Chris Lattner        result = m_opaque_sp->GetByteSize();
81cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
82c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    return result;
83c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
84c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
85cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerbool
86c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::IsInScope (const SBFrame &frame)
87c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
88063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner    bool result = false;
89c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
90d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner    if (IsValid())
91d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner        result = m_opaque_sp->IsInScope (frame.get());
92d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner
93d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner    return result;
94d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner}
95d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner
96c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char *
97c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetValue (const SBFrame &frame)
98c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
99c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    const char *value_string = NULL;
100c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    if ( m_opaque_sp)
101c3aae25116e66c177579b0b79182b09340b19753Chris Lattner        value_string = m_opaque_sp->GetValueAsCString (frame.get());
102c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    return value_string;
10315e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner}
104d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner
105c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char *
106d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris LattnerSBValue::GetObjectDescription (const SBFrame &frame)
107d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner{
108d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner    const char *value_string = NULL;
109cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    if ( m_opaque_sp)
110cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner        value_string = m_opaque_sp->GetObjectDescription (frame.get());
111d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner    return value_string;
112d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner}
113d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner
114d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattnerbool
115d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris LattnerSBValue::GetValueDidChange (const SBFrame &frame)
116d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner{
117d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner    if (IsValid())
118d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner        return m_opaque_sp->GetValueDidChange (frame.get());
11918c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner    return false;
12018c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner}
121d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner
122d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattnerconst char *
123cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::GetSummary (const SBFrame &frame)
124cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{
125c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    const char *value_string = NULL;
126c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    if ( m_opaque_sp)
127c3aae25116e66c177579b0b79182b09340b19753Chris Lattner        value_string = m_opaque_sp->GetSummaryAsCString(frame.get());
1284c1eae9fb329e0e371d453957c56426294de24e9Chris Lattner    return value_string;
1294211e73c4905af413db7524f24414c16a7f69102Chris Lattner}
1304211e73c4905af413db7524f24414c16a7f69102Chris Lattner
131c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char *
132c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetLocation (const SBFrame &frame)
133c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
134cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    const char *value_string = NULL;
135cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    if (IsValid())
13602b86f52ed19213ef4911da902145155c03fb136Chris Lattner        value_string = m_opaque_sp->GetLocationAsCString(frame.get());
13702b86f52ed19213ef4911da902145155c03fb136Chris Lattner    return value_string;
13802b86f52ed19213ef4911da902145155c03fb136Chris Lattner}
13902b86f52ed19213ef4911da902145155c03fb136Chris Lattner
1404211e73c4905af413db7524f24414c16a7f69102Chris Lattnerbool
1414211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue::SetValueFromCString (const SBFrame &frame, const char *value_str)
14202b86f52ed19213ef4911da902145155c03fb136Chris Lattner{
14302b86f52ed19213ef4911da902145155c03fb136Chris Lattner    bool success = false;
1444c1eae9fb329e0e371d453957c56426294de24e9Chris Lattner    if (IsValid())
14502b86f52ed19213ef4911da902145155c03fb136Chris Lattner        success = m_opaque_sp->SetValueFromCString (frame.get(), value_str);
14602b86f52ed19213ef4911da902145155c03fb136Chris Lattner    return success;
14702b86f52ed19213ef4911da902145155c03fb136Chris Lattner}
14802b86f52ed19213ef4911da902145155c03fb136Chris Lattner
14902b86f52ed19213ef4911da902145155c03fb136Chris LattnerSBValue
1507cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris LattnerSBValue::GetChildAtIndex (uint32_t idx)
151cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{
1521ccae666f596d5aeca5c9942995763600b622062Chris Lattner    lldb::ValueObjectSP child_sp;
1531ccae666f596d5aeca5c9942995763600b622062Chris Lattner
1541ccae666f596d5aeca5c9942995763600b622062Chris Lattner    if (IsValid())
1551ccae666f596d5aeca5c9942995763600b622062Chris Lattner    {
156c3aae25116e66c177579b0b79182b09340b19753Chris Lattner        child_sp = m_opaque_sp->GetChildAtIndex (idx, true);
157cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    }
158c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
159c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    SBValue sb_value (child_sp);
160c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    return sb_value;
161c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
162c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
163c3aae25116e66c177579b0b79182b09340b19753Chris Lattneruint32_t
164c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetIndexOfChildWithName (const char *name)
1652d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth{
1662d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth    if (IsValid())
167f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner        return m_opaque_sp->GetIndexOfChildWithName (ConstString(name));
168f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner    return UINT32_MAX;
169f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner}
170c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
1714211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue
1724211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue::GetChildMemberWithName (const char *name)
173c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{
1747cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    lldb::ValueObjectSP child_sp;
1757cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    const ConstString str_name (name);
1767cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner
1777cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    if (IsValid())
1787cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    {
1797cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner        child_sp = m_opaque_sp->GetChildMemberWithName (str_name, true);
1807cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    }
1819373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman
1829373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    SBValue sb_value (child_sp);
1839373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    return sb_value;
1849373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman}
1859373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman
1869373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman
1879373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begemanuint32_t
1889373a81e53ce5f9f2c06c4209b8b886605aece08Nate BegemanSBValue::GetNumChildren ()
1899373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman{
1907cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    uint32_t num_children = 0;
1917cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman
1927cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    if (IsValid())
1937cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    {
1947cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman        num_children = m_opaque_sp->GetNumChildren();
1957cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    }
1967cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman
1977cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return num_children;
1987cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman}
1997cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman
2007cbd525ba85ebe440d15fa359ec940e404d14906Nate Begemanbool
2017cbd525ba85ebe440d15fa359ec940e404d14906Nate BegemanSBValue::ValueIsStale ()
2027cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman{
2037cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    bool result = true;
2047cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman
2057cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    if (IsValid())
206c3aae25116e66c177579b0b79182b09340b19753Chris Lattner    {
207c3aae25116e66c177579b0b79182b09340b19753Chris Lattner        result = m_opaque_sp->GetValueIsValid();
208cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    }
20921074f43ed5165828717ea3606eb2bd222a39b26Chris Lattner
21021074f43ed5165828717ea3606eb2bd222a39b26Chris Lattner    return result;
2115f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner}
2125f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner
2132d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth
2142d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew LenharthSBValue
215691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew LenharthSBValue::Dereference ()
216cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{
2171b95095857b78e12138c22e76c7936611c51355bChris Lattner    if (IsValid())
2181b95095857b78e12138c22e76c7936611c51355bChris Lattner    {
2191b95095857b78e12138c22e76c7936611c51355bChris Lattner        if (m_opaque_sp->IsPointerType())
2201b95095857b78e12138c22e76c7936611c51355bChris Lattner        {
2211b95095857b78e12138c22e76c7936611c51355bChris Lattner            return GetChildAtIndex(0);
2221b95095857b78e12138c22e76c7936611c51355bChris Lattner        }
2231b95095857b78e12138c22e76c7936611c51355bChris Lattner    }
2241b95095857b78e12138c22e76c7936611c51355bChris Lattner    return *this;
2251b95095857b78e12138c22e76c7936611c51355bChris Lattner}
2261b95095857b78e12138c22e76c7936611c51355bChris Lattner
2271b95095857b78e12138c22e76c7936611c51355bChris Lattnerbool
2281b95095857b78e12138c22e76c7936611c51355bChris LattnerSBValue::TypeIsPtrType ()
2291b95095857b78e12138c22e76c7936611c51355bChris Lattner{
230cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner    bool is_ptr_type = false;
231d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner
232d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner    if (IsValid())
2331b95095857b78e12138c22e76c7936611c51355bChris Lattner    {
234d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner        is_ptr_type = m_opaque_sp->IsPointerType();
2357cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner    }
23632c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman
23732c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman    return is_ptr_type;
2384cf009f49cd37ae9cf4096dfe7ee9bcfa8e59b7aChris Lattner}
2394cf009f49cd37ae9cf4096dfe7ee9bcfa8e59b7aChris Lattner
2401cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnervoid *
24132c392a3a5e397b5f1cc83aaedfab96368d11e8aNate BegemanSBValue::GetOpaqueType()
24232c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman{
24332c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman    if (m_opaque_sp)
244ff66368a5f83ed62cb7817efc4a16b78c449a4c0Nate Begeman        return m_opaque_sp->GetOpaqueClangQualType();
245ff66368a5f83ed62cb7817efc4a16b78c449a4c0Nate Begeman    return NULL;
24632c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman}
2471cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner
2481cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner// Mimic shared pointer...
2491cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnerlldb_private::ValueObject *
2501cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::get() const
2511cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{
2521cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner    return m_opaque_sp.get();
253d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner}
2547cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner
2551cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnerlldb_private::ValueObject *
2561cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::operator->() const
2571cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{
2581cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner    return m_opaque_sp.get();
2591cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner}
2601cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner
261b29cb29364d3e22f062c695d2d5740dda42d8e8eChris Lattnerlldb::ValueObjectSP &
2621cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::operator*()
2631cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{
2641cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner    return m_opaque_sp;
26515e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner}
2665f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner
2674211e73c4905af413db7524f24414c16a7f69102Chris Lattnerconst lldb::ValueObjectSP &
2686765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris LattnerSBValue::operator*() const
2696765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris Lattner{
2706765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris Lattner    return m_opaque_sp;
2714211e73c4905af413db7524f24414c16a7f69102Chris Lattner}
2724211e73c4905af413db7524f24414c16a7f69102Chris Lattner
2734211e73c4905af413db7524f24414c16a7f69102Chris Lattnerbool
274cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::GetDescription (SBStream &description)
275cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{
2761080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner    if (m_opaque_sp)
2771080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner    {
2781080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        const char *name = GetName();
2791080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        const char *type_name = GetTypeName ();
2801080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        size_t byte_size = GetByteSize ();
2811080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        uint32_t num_children = GetNumChildren ();
2821080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        bool is_stale = ValueIsStale ();
2831080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        description.Printf ("name: '%s', type: %s, size: %d", (name != NULL ? name : "<unknown name>"),
2841080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner                            (type_name != NULL ? type_name : "<unknown type name>"), (int) byte_size);
2851080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner        if (num_children > 0)
286cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner            description.Printf (", num_children: %d", num_children);
287cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
288cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner        if (is_stale)
289            description.Printf (" [value is stale]");
290    }
291    else
292        description.Printf ("No value");
293
294    return true;
295}
296