124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Value.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 liblldb_Value_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Value_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 157c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#include <string> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataBufferHeap.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Error.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Scalar.h" 2452f792329be5db8e38961350589e97e8f2823acdGreg Clayton#include "lldb/Symbol/ClangASTType.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Value 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Values Less than zero are an error, greater than or equal to zero 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returns what the Scalar result is. 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum ValueType 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // m_value contains... 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // ============================ 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeScalar, // raw scalar value 397c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton eValueTypeVector, // byte array of m_vector.length with endianness of m_vector.byte_order 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeFileAddress, // file address value 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeLoadAddress, // load address value 4287c871847dba627a07cf6f4ac8cfb4d6722eccb5Eli Friedman eValueTypeHostAddress // host address value (for memory in the process that is using liblldb) 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum ContextType // Type that describes Value::m_context 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // m_context contains... 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // ==================== 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eContextTypeInvalid, // undefined 507c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton eContextTypeRegisterInfo, // RegisterInfo * (can be a scalar or a vector register) 516916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eContextTypeLLDBType, // lldb_private::Type * 522bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen eContextTypeVariable // lldb_private::Variable * 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55d387b462eecb908af265ecc7006781b4532073adGreg Clayton const static size_t kMaxByteSize = 32u; 567c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 577c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton struct Vector 587c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 597c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // The byte array must be big enough to hold vector registers for any supported target. 607c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton uint8_t bytes[kMaxByteSize]; 617c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton size_t length; 627c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton lldb::ByteOrder byte_order; 637c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 647c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector() : 657c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton length(0), 667c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton byte_order(lldb::eByteOrderInvalid) 677c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 687c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 697c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 707c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector(const Vector& vector) 717c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { *this = vector; 727c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 737c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton const Vector& 747c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton operator=(const Vector& vector) 757c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 76d387b462eecb908af265ecc7006781b4532073adGreg Clayton SetBytes(vector.bytes, vector.length, vector.byte_order); 777c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return *this; 787c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 797c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 8052f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 8152f792329be5db8e38961350589e97e8f2823acdGreg Clayton Clear () 8252f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 8352f792329be5db8e38961350589e97e8f2823acdGreg Clayton length = 0; 8452f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 8552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 8652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 87d387b462eecb908af265ecc7006781b4532073adGreg Clayton SetBytes(const void *bytes, size_t length, lldb::ByteOrder byte_order) 887c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 897c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton this->length = length; 907c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton this->byte_order = byte_order; 917c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length) 927c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton ::memcpy(this->bytes, bytes, length < kMaxByteSize ? length : kMaxByteSize); 937c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return IsValid(); 947c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 957c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 967c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 977c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton IsValid() const 987c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 997c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return (length > 0 && length < kMaxByteSize && byte_order != lldb::eByteOrderInvalid); 1007c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 1017c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Casts a vector, if valid, to an unsigned int of matching or largest supported size. 1027c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Truncates to the beginning of the vector if required. 1037c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Returns a default constructed Scalar if the Vector data is internally inconsistent. 1047c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Scalar 1057c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton GetAsScalar() const 1067c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 1077c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Scalar scalar; 1087c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (IsValid()) 109b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton { 110b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton if (length == 1) scalar = *(const uint8_t *)bytes; 111b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton else if (length == 2) scalar = *(const uint16_t *)bytes; 112b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton else if (length == 4) scalar = *(const uint32_t *)bytes; 113b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton else if (length == 8) scalar = *(const uint64_t *)bytes; 1147c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#if defined (ENABLE_128_BIT_SUPPORT) 115b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton else if (length >= 16) scalar = *(const __uint128_t *)bytes; 1167c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#else 117b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton else if (length >= 16) scalar = *(const __uint64_t *)bytes; 1187c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#endif 119b335e7090f1c6579d8bf2915f6a4a0ba98be15efGreg Clayton } 1207c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return scalar; 1217c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 1227c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton }; 1237c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(const Scalar& scalar); 1267c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Value(const Vector& vector); 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(const uint8_t *bytes, int len); 128bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Value(const Value &rhs); 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Value & 131bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton operator=(const Value &rhs); 132bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 13352f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType & 134462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton GetClangType(); 13552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 13652f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 13752f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetClangType (const ClangASTType &clang_type); 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueType 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueType() const; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 142b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueAddressType () const; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ContextType 146801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetContextType() const 147801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 148801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton return m_context_type; 149801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 152801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton SetValueType (ValueType value_type) 153801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 154801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_value_type = value_type; 155801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 158801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton ClearContext () 159801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 160801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context = NULL; 161801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context_type = eContextTypeInvalid; 162801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 165801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton SetContext (ContextType context_type, void *p) 166801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 167801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context_type = context_type; 168801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context = p; 1697c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (m_context_type == eContextTypeRegisterInfo) { 1707c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton RegisterInfo *reg_info = GetRegisterInfo(); 1717c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (reg_info->encoding == lldb::eEncodingVector) 1727c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetValueType(eValueTypeVector); 1737c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton else 1747c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetValueType(eValueTypeScalar); 1757c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 176801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 178b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton RegisterInfo * 17910dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata GetRegisterInfo() const; 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType(); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar & 18552f792329be5db8e38961350589e97e8f2823acdGreg Clayton ResolveValue (ExecutionContext *exe_ctx); 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18710dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata const Scalar & 18810dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata GetScalar() const 18910dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata { 19010dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata return m_value; 19110dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata } 19210dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata 19310dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata const Vector & 19410dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata GetVector() const 19510dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata { 19610dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata return m_vector; 19710dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata } 19810dc2a161c5a3c939a54ba0f4b98e797c5a29b56Enrico Granata 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar & 200801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetScalar() 201801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 202801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton return m_value; 203801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2057c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector & 2067c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton GetVector() 2077c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2087c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector; 2097c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2107c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 2117c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 2127c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetVectorBytes(const Vector& vector) 2137c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2147c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton m_vector = vector; 2157c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector.IsValid(); 2167c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2177c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 2187c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 2197c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetVectorBytes(uint8_t *bytes, size_t length, lldb::ByteOrder byte_order) 2207c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2217c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector.SetBytes(bytes, length, byte_order); 2227c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2237c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 2247c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 2257c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetScalarFromVector() 2267c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2277c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (m_vector.IsValid()) 2287c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2297c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton m_value = m_vector.GetAsScalar(); 2307c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return true; 2317c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2327c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return false; 2337c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2347c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 23636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton ResizeData(size_t len); 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 23952f792329be5db8e38961350589e97e8f2823acdGreg Clayton ValueOf(ExecutionContext *exe_ctx); 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Variable * 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetVariable(); 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream* strm); 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueDefaultFormat (); 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 250fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 25152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetValueByteSize (Error *error_ptr); 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 254801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetValueAsData (ExecutionContext *exe_ctx, 255801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton DataExtractor &data, 256801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton uint32_t data_offset, 257801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton Module *module); // Can be NULL 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueTypeAsCString (ValueType context_type); 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetContextTypeAsCString (ContextType context_type); 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 265427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 266427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetData (DataExtractor &data); 267427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 26852f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 26952f792329be5db8e38961350589e97e8f2823acdGreg Clayton Clear(); 27052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar m_value; 2737c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector m_vector; 27452f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType m_clang_type; 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void * m_context; 27652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ValueType m_value_type; 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ContextType m_context_type; 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataBufferHeap m_data_buffer; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ValueList 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 284bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ValueList () : 285bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_values() 286bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 287bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton } 288bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueList (const ValueList &rhs); 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 291bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ~ValueList () 292bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 293bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton } 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ValueList & operator= (const ValueList &rhs); 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // void InsertValue (Value *value, size_t idx); 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void PushValue (const Value &value); 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t GetSize (); 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value *GetValueAtIndex(size_t idx); 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Clear(); 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<Value> collection; 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection m_values; 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Value_h_ 315