ValueObjectDynamicValue.h revision 3b83055d13d30e8b10a15d04cd0619265e029158
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===-- ValueObjectDynamicValue.h -----------------------------------*- C++ -*-===// 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// The LLVM Compiler Infrastructure 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// This file is distributed under the University of Illinois Open Source 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// License. See LICENSE.TXT for details. 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===// 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef liblldb_ValueObjectDynamicValue_h_ 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define liblldb_ValueObjectDynamicValue_h_ 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C Includes 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C++ Includes 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Other libraries and framework includes 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Project includes 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Core/ValueObject.h" 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Symbol/Type.h" 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace lldb_private { 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//---------------------------------------------------------------------- 23// A ValueObject that represents memory at a given address, viewed as some 24// set lldb type. 25//---------------------------------------------------------------------- 26class ValueObjectDynamicValue : public ValueObject 27{ 28public: 29 virtual 30 ~ValueObjectDynamicValue(); 31 32 virtual uint64_t 33 GetByteSize(); 34 35 virtual ConstString 36 GetTypeName(); 37 38 virtual ConstString 39 GetQualifiedTypeName(); 40 41 virtual size_t 42 CalculateNumChildren(); 43 44 virtual lldb::ValueType 45 GetValueType() const; 46 47 virtual bool 48 IsInScope (); 49 50 virtual bool 51 IsDynamic () 52 { 53 return true; 54 } 55 56 virtual ValueObject * 57 GetParent() 58 { 59 if (m_parent) 60 return m_parent->GetParent(); 61 else 62 return NULL; 63 } 64 65 virtual const ValueObject * 66 GetParent() const 67 { 68 if (m_parent) 69 return m_parent->GetParent(); 70 else 71 return NULL; 72 } 73 74 virtual lldb::ValueObjectSP 75 GetStaticValue () 76 { 77 return m_parent->GetSP(); 78 } 79 80 void 81 SetOwningSP (lldb::ValueObjectSP &owning_sp) 82 { 83 if (m_owning_valobj_sp == owning_sp) 84 return; 85 86 assert (m_owning_valobj_sp.get() == NULL); 87 m_owning_valobj_sp = owning_sp; 88 } 89 90 virtual bool 91 SetValueFromCString (const char *value_str, Error& error); 92 93protected: 94 virtual bool 95 UpdateValue (); 96 97 virtual lldb::DynamicValueType 98 GetDynamicValueTypeImpl () 99 { 100 return m_use_dynamic; 101 } 102 103 virtual bool 104 HasDynamicValueTypeInfo () 105 { 106 return true; 107 } 108 109 virtual clang::ASTContext * 110 GetClangASTImpl (); 111 112 virtual lldb::clang_type_t 113 GetClangTypeImpl (); 114 115 Address m_address; ///< The variable that this value object is based upon 116 TypeAndOrName m_dynamic_type_info; // We can have a type_sp or just a name 117 lldb::ValueObjectSP m_owning_valobj_sp; 118 lldb::DynamicValueType m_use_dynamic; 119 120private: 121 friend class ValueObject; 122 friend class ValueObjectConstResult; 123 ValueObjectDynamicValue (ValueObject &parent, lldb::DynamicValueType use_dynamic); 124 125 //------------------------------------------------------------------ 126 // For ValueObject only 127 //------------------------------------------------------------------ 128 DISALLOW_COPY_AND_ASSIGN (ValueObjectDynamicValue); 129}; 130 131} // namespace lldb_private 132 133#endif // liblldb_ValueObjectDynamicValue_h_ 134