124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBValue.h -----------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBValue_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBValue_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBData.h"
145f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
15979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata#include "lldb/API/SBType.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17bf26ea6ffa9426b8f23c78aa8cf18b809beb364cEnrico Granataclass ValueImpl;
18bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Inghamclass ValueLocker;
199ae7cef26612773c6b3422834cec83f0fbb2cf8cEnrico Granata
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBValue
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
24bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Inghamfriend class ValueLocker;
25bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBValue ();
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBValue (const lldb::SBValue &rhs);
30538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
31d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBValue &
32d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator =(const lldb::SBValue &rhs);
334758a3ced524198d2cf9c50bab9b088adcbda9cbEnrico Granata
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBValue ();
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
37d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    IsValid();
38c5f728c81b4896cfbbc87ed1daedf42ba2c0ee63Greg Clayton
39e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham    void
40e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham    Clear();
41e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham
42c5f728c81b4896cfbbc87ed1daedf42ba2c0ee63Greg Clayton    SBError
43c5f728c81b4896cfbbc87ed1daedf42ba2c0ee63Greg Clayton    GetError();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45968958c31c42224cfd5eb4ba0cf6fe0157ab375cJohnny Chen    lldb::user_id_t
46968958c31c42224cfd5eb4ba0cf6fe0157ab375cJohnny Chen    GetID ();
47968958c31c42224cfd5eb4ba0cf6fe0157ab375cJohnny Chen
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetName();
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTypeName ();
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetByteSize ();
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
58fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    IsInScope ();
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
60e179a5840a49167964ca768a13c252c58c9cffccGreg Clayton    lldb::Format
61d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetFormat ();
62e179a5840a49167964ca768a13c252c58c9cffccGreg Clayton
63e179a5840a49167964ca768a13c252c58c9cffccGreg Clayton    void
64e179a5840a49167964ca768a13c252c58c9cffccGreg Clayton    SetFormat (lldb::Format format);
65e179a5840a49167964ca768a13c252c58c9cffccGreg Clayton
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
67fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    GetValue ();
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
690fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    int64_t
70d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetValueAsSigned (lldb::SBError& error, int64_t fail_value=0);
71c92eb4004a354b0ea085b610b2ba991e575b1c32Enrico Granata
72c92eb4004a354b0ea085b610b2ba991e575b1c32Enrico Granata    uint64_t
73d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetValueAsUnsigned (lldb::SBError& error, uint64_t fail_value=0);
74c92eb4004a354b0ea085b610b2ba991e575b1c32Enrico Granata
75c92eb4004a354b0ea085b610b2ba991e575b1c32Enrico Granata    int64_t
760fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    GetValueAsSigned(int64_t fail_value=0);
770fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
780fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    uint64_t
790fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    GetValueAsUnsigned(uint64_t fail_value=0);
800fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
81f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    ValueType
82f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    GetValueType ();
83f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
85fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    GetValueDidChange ();
86fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham
87fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    const char *
88fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    GetSummary ();
894ae519666628cca07c194bf677163009cc2e5a8bJim Ingham
904ae519666628cca07c194bf677163009cc2e5a8bJim Ingham    const char *
91fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    GetObjectDescription ();
921b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham
931b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham    lldb::SBValue
941b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham    GetDynamicValue (lldb::DynamicValueType use_dynamic);
951b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham
961b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham    lldb::SBValue
971b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham    GetStaticValue ();
981b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham
99dba1de8d585f27601162f674d30ab71d9c83ccdeEnrico Granata    lldb::SBValue
100dba1de8d585f27601162f674d30ab71d9c83ccdeEnrico Granata    GetNonSyntheticValue ();
101dba1de8d585f27601162f674d30ab71d9c83ccdeEnrico Granata
1023d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    lldb::DynamicValueType
1033d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    GetPreferDynamicValue ();
1043d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
1053d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
1063d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetPreferDynamicValue (lldb::DynamicValueType use_dynamic);
1073d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
1083d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    bool
1093d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    GetPreferSyntheticValue ();
1103d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
1113d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
1123d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetPreferSyntheticValue (bool use_synthetic);
1133d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
1141b42575189379cb0c1441f74a48127e9ab7335e3Jim Ingham    bool
1153d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    IsDynamic ();
1163d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
1173d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    bool
1183d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    IsSynthetic ();
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
121fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    GetLocation ();
122fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham
123651cbe2e3f6efb8bd579a5007c2d2f90f0ab7633Enrico Granata    // Deprecated - use the one that takes SBError&
124fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    bool
125fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    SetValueFromCString (const char *value_str);
126651cbe2e3f6efb8bd579a5007c2d2f90f0ab7633Enrico Granata
127651cbe2e3f6efb8bd579a5007c2d2f90f0ab7633Enrico Granata    bool
128651cbe2e3f6efb8bd579a5007c2d2f90f0ab7633Enrico Granata    SetValueFromCString (const char *value_str, lldb::SBError& error);
129d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
130d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb::SBTypeFormat
131d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    GetTypeFormat ();
132d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
133c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON
134d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb::SBTypeSummary
135d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    GetTypeSummary ();
136c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif
137c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda
138d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb::SBTypeFilter
139d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    GetTypeFilter ();
140d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
141c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON
142d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb::SBTypeSynthetic
143d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    GetTypeSynthetic ();
144c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBValue
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetChildAtIndex (uint32_t idx);
148979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
149979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBValue
150d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    CreateChildAtOffset (const char *name, uint32_t offset, lldb::SBType type);
151979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
152979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBValue
153d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    Cast (lldb::SBType type);
154979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
155979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBValue
156979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    CreateValueFromExpression (const char *name, const char* expression);
157979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
158979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBValue
15947beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham    CreateValueFromExpression (const char *name, const char* expression, SBExpressionOptions &options);
16047beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham
16147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham    lldb::SBValue
162d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    CreateValueFromAddress (const char* name,
163d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                            lldb::addr_t address,
164d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                            lldb::SBType type);
165915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
166915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // this has no address! GetAddress() and GetLoadAddress() as well as AddressOf()
167915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // on the return of this call all return invalid
168915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::SBValue
169915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    CreateValueFromData (const char* name,
170d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                         lldb::SBData data,
171d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                         lldb::SBType type);
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1738f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    //------------------------------------------------------------------
1748f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Get a child value by index from a value.
1758f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
1768f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Structs, unions, classes, arrays and and pointers have child
1778f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// values that can be access by index.
1788f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
1798f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Structs and unions access child members using a zero based index
1808f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// for each child member. For
1818f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
1828f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Classes reserve the first indexes for base classes that have
1838f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// members (empty base classes are omitted), and all members of the
1848f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// current class will then follow the base classes.
1858f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
1868f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Pointers differ depending on what they point to. If the pointer
1878f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// points to a simple type, the child at index zero
1888f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// is the only child value available, unless \a synthetic_allowed
1898f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// is \b true, in which case the pointer will be used as an array
190533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// and can create 'synthetic' child values using positive or
1918f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// negative indexes. If the pointer points to an aggregate type
1928f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// (an array, class, union, struct), then the pointee is
1938f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// transparently skipped and any children are going to be the indexes
1948f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// of the child values within the aggregate type. For example if
195533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// we have a 'Point' type and we have a SBValue that contains a
196533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// pointer to a 'Point' type, then the child at index zero will be
197533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// the 'x' member, and the child at index 1 will be the 'y' member
198533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// (the child at index zero won't be a 'Point' instance).
1998f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
2008f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// Arrays have a preset number of children that can be accessed by
2018f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// index and will returns invalid child values for indexes that are
2028f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// out of bounds unless the \a synthetic_allowed is \b true. In this
203533ed2fd6d3763654cd35cdc2379e1bf1049e0ddJohnny Chen    /// case the array can create 'synthetic' child values for indexes
2048f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// that aren't in the array bounds using positive or negative
2058f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// indexes.
2068f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
2078f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// @param[in] idx
2088f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     The index of the child value to get
2098f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
2108f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// @param[in] use_dynamic
2118f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     An enumeration that specifies wether to get dynamic values,
2128f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     and also if the target can be run to figure out the dynamic
2138f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     type of the child value.
2148f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
2158f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// @param[in] synthetic_allowed
2168f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     If \b true, then allow child values to be created by index
2178f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     for pointers and arrays for indexes that normally wouldn't
2188f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     be allowed.
2198f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///
2208f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    /// @return
2218f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    ///     A new SBValue object that represents the child member value.
2228f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    //------------------------------------------------------------------
223e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    lldb::SBValue
2248f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton    GetChildAtIndex (uint32_t idx,
2258f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton                     lldb::DynamicValueType use_dynamic,
2268f64c47120c81728aac0ab0d66097c9a92284f6fGreg Clayton                     bool can_create_synthetic);
227e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Matches children of this object only and will match base classes and
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // member names if this is a clang typed object.
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIndexOfChildWithName (const char *name);
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Matches child members of this object and child members of any base
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // classes.
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBValue
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetChildMemberWithName (const char *name);
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
238e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    // Matches child members of this object and child members of any base
239e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    // classes.
240e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    lldb::SBValue
24110de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham    GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic);
242f7a9b14c2c02d2fa9fad586c19f29d77533fcc09Enrico Granata
243f7a9b14c2c02d2fa9fad586c19f29d77533fcc09Enrico Granata    // Expands nested expressions like .a->b[0].c[1]->d
244f7a9b14c2c02d2fa9fad586c19f29d77533fcc09Enrico Granata    lldb::SBValue
245f7a9b14c2c02d2fa9fad586c19f29d77533fcc09Enrico Granata    GetValueForExpressionPath(const char* expr_path);
246979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
247979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBValue
248979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    AddressOf();
249915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
250915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::addr_t
251915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetLoadAddress();
252915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
253915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::SBAddress
254915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetAddress();
255e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham
256915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    //------------------------------------------------------------------
257915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// Get an SBData wrapping what this SBValue points to.
258915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
259915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// This method will dereference the current SBValue, if its
260915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// data type is a T* or T[], and extract item_count elements
261915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// of type T from it, copying their contents in an SBData.
262915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
263915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// @param[in] item_idx
264915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     The index of the first item to retrieve. For an array
265915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     this is equivalent to array[item_idx], for a pointer
266915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     to *(pointer + item_idx). In either case, the measurement
267915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     unit for item_idx is the sizeof(T) rather than the byte
268915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
269915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// @param[in] item_count
270915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     How many items should be copied into the output. By default
271915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     only one item is copied, but more can be asked for.
272915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
273915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// @return
274915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     An SBData with the contents of the copied items, on success.
275915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     An empty SBData otherwise.
276915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    //------------------------------------------------------------------
277915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::SBData
278915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetPointeeData (uint32_t item_idx = 0,
279cc7de484073d40dc115e4f1a8271f016718a3714Johnny Chen                    uint32_t item_count = 1);
280915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
281915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    //------------------------------------------------------------------
282915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// Get an SBData wrapping the contents of this SBValue.
283915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
284915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// This method will read the contents of this object in memory
285915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// and copy them into an SBData for future use.
286915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///
287915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    /// @return
288915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     An SBData with the contents of this SBValue, on success.
289915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ///     An empty SBData otherwise.
290915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    //------------------------------------------------------------------
291915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::SBData
292915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetData ();
293915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
294ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan    bool
295ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan    SetData (lldb::SBData &data, lldb::SBError& error);
296ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan
29749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata    lldb::SBDeclaration
29849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata    GetDeclaration ();
29949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata
30054037b1488e3344575714d8358728e042fa801c7Greg Clayton    //------------------------------------------------------------------
30154037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// Find out if a SBValue might have children.
30254037b1488e3344575714d8358728e042fa801c7Greg Clayton    ///
30354037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// This call is much more efficient than GetNumChildren() as it
30454037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// doesn't need to complete the underlying type. This is designed
30554037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// to be used in a UI environment in order to detect if the
30654037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// disclosure triangle should be displayed or not.
30754037b1488e3344575714d8358728e042fa801c7Greg Clayton    ///
30854037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// This function returns true for class, union, structure,
30954037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// pointers, references, arrays and more. Again, it does so without
31054037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// doing any expensive type completion.
31154037b1488e3344575714d8358728e042fa801c7Greg Clayton    ///
31254037b1488e3344575714d8358728e042fa801c7Greg Clayton    /// @return
31354037b1488e3344575714d8358728e042fa801c7Greg Clayton    ///     Returns \b true if the SBValue might have children, or \b
31454037b1488e3344575714d8358728e042fa801c7Greg Clayton    ///     false otherwise.
31554037b1488e3344575714d8358728e042fa801c7Greg Clayton    //------------------------------------------------------------------
31654037b1488e3344575714d8358728e042fa801c7Greg Clayton    bool
31754037b1488e3344575714d8358728e042fa801c7Greg Clayton    MightHaveChildren ();
31854037b1488e3344575714d8358728e042fa801c7Greg Clayton
31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumChildren ();
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void *
32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetOpaqueType();
32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
325979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBTarget
326979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetTarget();
327979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
328979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBProcess
329979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetProcess();
330979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
331979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBThread
332979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetThread();
33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
334979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBFrame
335979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetFrame();
336979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBValue
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dereference ();
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
34149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    TypeIsPointerType ();
342979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
343d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
344979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetType();
34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
34798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
34898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
34949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    bool
35049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    GetExpressionPath (lldb::SBStream &description);
351b01000fd063629facd45044f137446fb748ee179Greg Clayton
352b01000fd063629facd45044f137446fb748ee179Greg Clayton    bool
353d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetExpressionPath (lldb::SBStream &description,
354d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                       bool qualify_cxx_base_classes);
35549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton
356f7a9b14c2c02d2fa9fad586c19f29d77533fcc09Enrico Granata    SBValue (const lldb::ValueObjectSP &value_sp);
357915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
3581fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    //------------------------------------------------------------------
3591fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// Watch this value if it resides in memory.
3601fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3611fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// Sets a watchpoint on the value.
3621fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3631fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] resolve_location
3641fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Resolve the location of this value once and watch its address.
3651fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     This value must currently be set to \b true as watching all
3661fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     locations of a variable or a variable path is not yet supported,
3671fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     though we plan to support it in the future.
3681fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3691fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] read
3701fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Stop when this value is accessed.
3711fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3721fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] write
3731fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Stop when this value is modified
3741fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3753f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    /// @param[out]
3763f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    ///     An error object. Contains the reason if there is some failure.
3773f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    ///
3781fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @return
3791fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     An SBWatchpoint object. This object might not be valid upon
3801fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     return due to a value not being contained in memory, too
3811fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     large, or watchpoint resources are not available or all in
3821fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     use.
3831fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    //------------------------------------------------------------------
3841fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    lldb::SBWatchpoint
3853f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    Watch (bool resolve_location, bool read, bool write, SBError &error);
3861fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton
3878a5ce77ad5356af485a119186fc2ad536d21149bJohnny Chen    // Backward compatibility fix in the interim.
3888a5ce77ad5356af485a119186fc2ad536d21149bJohnny Chen    lldb::SBWatchpoint
3898a5ce77ad5356af485a119186fc2ad536d21149bJohnny Chen    Watch (bool resolve_location, bool read, bool write);
3908a5ce77ad5356af485a119186fc2ad536d21149bJohnny Chen
3911fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    //------------------------------------------------------------------
3921fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// Watch this value that this value points to in memory
3931fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3941fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// Sets a watchpoint on the value.
3951fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
3961fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] resolve_location
3971fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Resolve the location of this value once and watch its address.
3981fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     This value must currently be set to \b true as watching all
3991fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     locations of a variable or a variable path is not yet supported,
4001fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     though we plan to support it in the future.
4011fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
4021fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] read
4031fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Stop when this value is accessed.
4041fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
4051fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @param[in] write
4061fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     Stop when this value is modified
4071fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///
4083f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    /// @param[out]
4093f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    ///     An error object. Contains the reason if there is some failure.
4103f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    ///
4111fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    /// @return
4121fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     An SBWatchpoint object. This object might not be valid upon
4131fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     return due to a value not being contained in memory, too
4141fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     large, or watchpoint resources are not available or all in
4151fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    ///     use.
4161fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    //------------------------------------------------------------------
4171fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    lldb::SBWatchpoint
4183f883496e92fce5011f6bf585af3ac6d1cddb64fJohnny Chen    WatchPointee (bool resolve_location, bool read, bool write, SBError &error);
4191fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton
420bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    //------------------------------------------------------------------
421bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// Same as the protected version of GetSP that takes a locker, except that we make the
422bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// locker locally in the function.  Since the Target API mutex is recursive, and the
423bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// StopLocker is a read lock, you can call this function even if you are already
424bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// holding the two above-mentioned locks.
425bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///
426bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// @return
427bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
428bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     can cons up, in accordance with the SBValue's settings.
429bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    //------------------------------------------------------------------
4303d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    lldb::ValueObjectSP
431eeabe815b3d36b69b4666fbbce78a4bf950de3ccGreg Clayton    GetSP () const;
432915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
4343d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    friend class SBBlock;
43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBFrame;
43619b646725e7d6bebda787fa3cb55ff223a00d907Greg Clayton    friend class SBTarget;
437a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham    friend class SBThread;
4383d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    friend class SBValueList;
43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
440bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    //------------------------------------------------------------------
441bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// Get the appropriate ValueObjectSP from this SBValue, consulting the
442bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// use_dynamic and use_synthetic options passed in to SetSP when the
443bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// SBValue's contents were set.  Since this often requires examining memory,
444bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// and maybe even running code, it needs to acquire the Target API and Process StopLock.
445bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// Those are held in an opaque class ValueLocker which is currently local to SBValue.cpp.
446bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// So you don't have to get these yourself just default construct a ValueLocker, and pass it into this.
447bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// If we need to make a ValueLocker and use it in some other .cpp file, we'll have to move it to
448bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// ValueObject.h/cpp or somewhere else convenient.  We haven't needed to so far.
449bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///
450bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// @param[in] value_locker
451bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     An object that will hold the Target API, and Process RunLocks, and
452bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     auto-destroy them when it goes out of scope.  Currently this is only useful in
453bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     SBValue.cpp.
454bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///
455bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    /// @return
456bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
457bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    ///     can cons up, in accordance with the SBValue's settings.
458bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    //------------------------------------------------------------------
459bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    lldb::ValueObjectSP
460bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    GetSP (ValueLocker &value_locker) const;
461bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham
4623d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    // these calls do the right thing WRT adjusting their settings according to the target's preferences
4630a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    void
4640a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    SetSP (const lldb::ValueObjectSP &sp);
4653d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
4663d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
4673d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetSP (const lldb::ValueObjectSP &sp, bool use_synthetic);
4683d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
4693d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
4703d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic);
4713d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
4723d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
4733d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic, bool use_synthetic);
4740a19a1b9c25117854f226256805239d95153ed2dGreg Clayton
475bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    void
476bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham    SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic, bool use_synthetic, const char *name);
477bef2dde1407f2b7b7cf36739d23439c8f1dd0fc4Jim Ingham
47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
479102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    typedef std::shared_ptr<ValueImpl> ValueImplSP;
4803d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    ValueImplSP m_opaque_sp;
4813d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata
4823d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    void
4833d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata    SetSP (ValueImplSP impl_sp);
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // LLDB_SBValue_h_
489