Value.h revision 7c5e22f2edf0a0ef17e3a401c814a873399d108a
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" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Value 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Values Less than zero are an error, greater than or equal to zero 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // returns what the Scalar result is. 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum ValueType 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // m_value contains... 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // ============================ 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeScalar, // raw scalar value 387c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton eValueTypeVector, // byte array of m_vector.length with endianness of m_vector.byte_order 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeFileAddress, // file address value 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eValueTypeLoadAddress, // load address value 4187c871847dba627a07cf6f4ac8cfb4d6722eccb5Eli Friedman eValueTypeHostAddress // host address value (for memory in the process that is using liblldb) 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum ContextType // Type that describes Value::m_context 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // m_context contains... 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // ==================== 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eContextTypeInvalid, // undefined 496916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eContextTypeClangType, // void * (an opaque clang::QualType * that can be fed to "static QualType QualType::getFromOpaquePtr(void *)") 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 557c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton enum 567c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 577c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton kMaxByteSize = 32u 587c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton }; 597c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 607c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton struct Vector 617c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 627c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // The byte array must be big enough to hold vector registers for any supported target. 637c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton uint8_t bytes[kMaxByteSize]; 647c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton size_t length; 657c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton lldb::ByteOrder byte_order; 667c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 677c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector() : 687c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton length(0), 697c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton byte_order(lldb::eByteOrderInvalid) 707c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 717c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 727c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 737c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector(const Vector& vector) 747c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { *this = vector; 757c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 767c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton const Vector& 777c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton operator=(const Vector& vector) 787c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 797c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetBytes((uint8_t *)vector.bytes, vector.length, vector.byte_order); 807c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return *this; 817c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 827c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 837c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 847c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetBytes(uint8_t *bytes, size_t length, lldb::ByteOrder byte_order) 857c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 867c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton this->length = length; 877c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton this->byte_order = byte_order; 887c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length) 897c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton ::memcpy(this->bytes, bytes, length < kMaxByteSize ? length : kMaxByteSize); 907c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return IsValid(); 917c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 927c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 937c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 947c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton IsValid() const 957c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 967c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return (length > 0 && length < kMaxByteSize && byte_order != lldb::eByteOrderInvalid); 977c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 987c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Casts a vector, if valid, to an unsigned int of matching or largest supported size. 997c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Truncates to the beginning of the vector if required. 1007c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton // Returns a default constructed Scalar if the Vector data is internally inconsistent. 1017c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Scalar 1027c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton GetAsScalar() const 1037c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 1047c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Scalar scalar; 1057c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (IsValid()) 1067c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length == 1) scalar = *(uint8_t *)bytes; 1077c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length == 2) scalar = *(uint16_t *)bytes; 1087c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length == 4) scalar = *(uint32_t *)bytes; 1097c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length == 8) scalar = *(uint64_t *)bytes; 1107c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#if defined (ENABLE_128_BIT_SUPPORT) 1117c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length >= 16) scalar = *(__uint128_t *)bytes; 1127c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#else 1137c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (length >= 16) scalar = *(__uint64_t *)bytes; 1147c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton#endif 1157c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return scalar; 1167c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 1177c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton }; 1187c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(); 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(const Scalar& scalar); 1217c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Value(const Vector& vector); 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value(const uint8_t *bytes, int len); 123bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Value(const Value &rhs); 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 125bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Value & 126bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton operator=(const Value &rhs); 127bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 12804c9c7b03fbec6d0dcc6c848391147de2f129c66Greg Clayton lldb::clang_type_t 129462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton GetClangType(); 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueType 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueType() const; 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 134b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueAddressType () const; 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ContextType 138801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetContextType() const 139801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 140801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton return m_context_type; 141801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 144801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton SetValueType (ValueType value_type) 145801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 146801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_value_type = value_type; 147801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 150801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton ClearContext () 151801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 152801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context = NULL; 153801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context_type = eContextTypeInvalid; 154801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 157801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton SetContext (ContextType context_type, void *p) 158801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 159801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context_type = context_type; 160801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton m_context = p; 1617c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (m_context_type == eContextTypeRegisterInfo) { 1627c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton RegisterInfo *reg_info = GetRegisterInfo(); 1637c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (reg_info->encoding == lldb::eEncodingVector) 1647c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetValueType(eValueTypeVector); 1657c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton else 1667c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetValueType(eValueTypeScalar); 1677c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 168801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton RegisterInfo * 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetRegisterInfo(); 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type * 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetType(); 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar & 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveValue (ExecutionContext *exe_ctx, clang::ASTContext *ast_context); 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar & 180801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetScalar() 181801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton { 182801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton return m_value; 183801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton } 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1857c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector & 1867c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton GetVector() 1877c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 1887c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector; 1897c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 1907c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 1917c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 1927c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetVectorBytes(const Vector& vector) 1937c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 1947c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton m_vector = vector; 1957c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector.IsValid(); 1967c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 1977c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 1987c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 1997c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetVectorBytes(uint8_t *bytes, size_t length, lldb::ByteOrder byte_order) 2007c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2017c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return m_vector.SetBytes(bytes, length, byte_order); 2027c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2037c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 2047c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton bool 2057c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton SetScalarFromVector() 2067c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2077c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton if (m_vector.IsValid()) 2087c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton { 2097c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton m_value = m_vector.GetAsScalar(); 2107c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return true; 2117c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2127c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton return false; 2137c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton } 2147c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResizeData(int len); 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueOf(ExecutionContext *exe_ctx, clang::ASTContext *ast_context); 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Variable * 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetVariable(); 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream* strm); 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueDefaultFormat (); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueByteSize (clang::ASTContext *ast_context, Error *error_ptr); 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 234801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton GetValueAsData (ExecutionContext *exe_ctx, 235801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton clang::ASTContext *ast_context, 236801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton DataExtractor &data, 237801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton uint32_t data_offset, 238801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton Module *module); // Can be NULL 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetValueTypeAsCString (ValueType context_type); 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetContextTypeAsCString (ContextType context_type); 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 246427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 247427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetData (DataExtractor &data); 248427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Scalar m_value; 2517c5e22f2edf0a0ef17e3a401c814a873399d108aGreg Clayton Vector m_vector; 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueType m_value_type; 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void * m_context; 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ContextType m_context_type; 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataBufferHeap m_data_buffer; 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ValueList 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 261bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ValueList () : 262bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_values() 263bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 264bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton } 265bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueList (const ValueList &rhs); 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ~ValueList () 269bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 270bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton } 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ValueList & operator= (const ValueList &rhs); 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // void InsertValue (Value *value, size_t idx); 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void PushValue (const Value &value); 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t GetSize (); 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value *GetValueAtIndex(size_t idx); 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Clear(); 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<Value> collection; 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection m_values; 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Value_h_ 292