1915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===-- ValueObjectConstResultImpl.h -----------------------------*- C++ -*-===// 2915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 3915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// The LLVM Compiler Infrastructure 4915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 5915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// This file is distributed under the University of Illinois Open Source 6915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// License. See LICENSE.TXT for details. 7915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 8915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===----------------------------------------------------------------------===// 9915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 10915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#ifndef liblldb_ValueObjectConstResultImpl_h_ 11915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#define liblldb_ValueObjectConstResultImpl_h_ 12915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 13915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// C Includes 14915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// C++ Includes 15915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// Other libraries and framework includes 16915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// Project includes 17915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/Core/ValueObject.h" 18915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 19915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatanamespace lldb_private { 20915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 21915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//---------------------------------------------------------------------- 22915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// A class wrapping common implementation details for operations in 23915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// ValueObjectConstResult ( & Child ) that may need to jump from the host 24915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// memory space into the target's memory space 25915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//---------------------------------------------------------------------- 26915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataclass ValueObjectConstResultImpl 27915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{ 28915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatapublic: 29915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 30915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ValueObjectConstResultImpl (ValueObject* valobj, 31915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::addr_t live_address = LLDB_INVALID_ADDRESS); 32915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 33915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata virtual 34915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ~ValueObjectConstResultImpl() 35915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { 36915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata } 37915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 38915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP 39915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata Dereference (Error &error); 40915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 41915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ValueObject * 4236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index); 43915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 44915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP 45915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetSyntheticChildAtOffset (uint32_t offset, const ClangASTType& type, bool can_create); 46915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 47915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP 48915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata AddressOf (Error &error); 49915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 50915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata bool 51915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata NeedsDerefOnTarget() 52915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { 53915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata m_impl_backend->UpdateValueIfNeeded(false); 54915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata return (m_impl_backend->GetValue().GetValueType() == Value::eValueTypeHostAddress); 55915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata } 56915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 57915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::addr_t 58915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetLiveAddress() 59915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { 60915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata return m_live_address; 61915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata } 62915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 63915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata void 64dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS, 65dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen AddressType address_type = eAddressTypeLoad) 66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { 67915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata m_live_address = addr; 68dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen m_live_address_type = address_type; 69915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata } 70915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 71915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP 72915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata DerefOnTarget(); 73915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 74dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen virtual lldb::addr_t 75dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen GetAddressOf (bool scalar_is_load_address = true, 76dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen AddressType *address_type = NULL); 77dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen 78915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata virtual size_t 79915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetPointeeData (DataExtractor& data, 80915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint32_t item_idx = 0, 81915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint32_t item_count = 1); 82915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprivate: 84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 85915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ValueObject *m_impl_backend; 86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::addr_t m_live_address; 87dfafa141aa9d0dd0596bf08b3f941be8c308316dJohnny Chen AddressType m_live_address_type; 88915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP m_load_addr_backend; 89915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ValueObjectSP m_address_of_backend; 90915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 91915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata DISALLOW_COPY_AND_ASSIGN (ValueObjectConstResultImpl); 92915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}; 93915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 94915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata} // namespace lldb_private 95915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 96915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif // liblldb_ValueObjectConstResultImpl_h_ 97