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