1254721Semaste//===-- ClangExpressionVariable.cpp -----------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/Expression/ClangExpressionVariable.h" 11254721Semaste 12254721Semaste// C Includes 13254721Semaste// C++ Includes 14254721Semaste// Other libraries and framework includes 15254721Semaste// Project includes 16254721Semaste#include "clang/AST/ASTContext.h" 17254721Semaste#include "lldb/Core/ConstString.h" 18254721Semaste#include "lldb/Core/DataExtractor.h" 19254721Semaste#include "lldb/Core/Stream.h" 20254721Semaste#include "lldb/Core/Value.h" 21254721Semaste#include "lldb/Core/ValueObjectConstResult.h" 22254721Semaste#include "lldb/Target/ExecutionContext.h" 23254721Semaste#include "lldb/Target/Process.h" 24254721Semaste 25254721Semasteusing namespace lldb_private; 26254721Semasteusing namespace clang; 27254721Semaste 28254721SemasteClangExpressionVariable::ClangExpressionVariable(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size) : 29254721Semaste m_parser_vars(), 30254721Semaste m_jit_vars (), 31254721Semaste m_flags (EVNone), 32254721Semaste m_frozen_sp (ValueObjectConstResult::Create (exe_scope, byte_order, addr_byte_size)) 33254721Semaste{ 34254721Semaste} 35254721Semaste 36254721SemasteClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) : 37254721Semaste m_parser_vars(), 38254721Semaste m_jit_vars (), 39254721Semaste m_flags (EVNone), 40254721Semaste m_frozen_sp (valobj_sp) 41254721Semaste{ 42254721Semaste} 43254721Semaste 44254721Semaste//---------------------------------------------------------------------- 45254721Semaste/// Return the variable's size in bytes 46254721Semaste//---------------------------------------------------------------------- 47254721Semastesize_t 48254721SemasteClangExpressionVariable::GetByteSize () 49254721Semaste{ 50254721Semaste return m_frozen_sp->GetByteSize(); 51254721Semaste} 52254721Semaste 53254721Semasteconst ConstString & 54254721SemasteClangExpressionVariable::GetName () 55254721Semaste{ 56254721Semaste return m_frozen_sp->GetName(); 57254721Semaste} 58254721Semaste 59254721Semastelldb::ValueObjectSP 60254721SemasteClangExpressionVariable::GetValueObject() 61254721Semaste{ 62254721Semaste return m_frozen_sp; 63254721Semaste} 64254721Semaste 65254721SemasteRegisterInfo * 66254721SemasteClangExpressionVariable::GetRegisterInfo() 67254721Semaste{ 68254721Semaste return m_frozen_sp->GetValue().GetRegisterInfo(); 69254721Semaste} 70254721Semaste 71254721Semastevoid 72254721SemasteClangExpressionVariable::SetRegisterInfo (const RegisterInfo *reg_info) 73254721Semaste{ 74254721Semaste return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info)); 75254721Semaste} 76254721Semaste 77254721SemasteClangASTType 78254721SemasteClangExpressionVariable::GetClangType() 79254721Semaste{ 80254721Semaste return m_frozen_sp->GetClangType(); 81254721Semaste} 82254721Semaste 83254721Semastevoid 84254721SemasteClangExpressionVariable::SetClangType(const ClangASTType &clang_type) 85254721Semaste{ 86254721Semaste m_frozen_sp->GetValue().SetClangType(clang_type); 87254721Semaste} 88254721Semaste 89254721Semaste 90254721SemasteTypeFromUser 91254721SemasteClangExpressionVariable::GetTypeFromUser() 92254721Semaste{ 93254721Semaste TypeFromUser tfu (m_frozen_sp->GetClangType()); 94254721Semaste return tfu; 95254721Semaste} 96254721Semaste 97254721Semasteuint8_t * 98254721SemasteClangExpressionVariable::GetValueBytes() 99254721Semaste{ 100254721Semaste const size_t byte_size = m_frozen_sp->GetByteSize(); 101254721Semaste if (byte_size > 0) 102254721Semaste { 103254721Semaste if (m_frozen_sp->GetDataExtractor().GetByteSize() < byte_size) 104254721Semaste { 105254721Semaste m_frozen_sp->GetValue().ResizeData(byte_size); 106254721Semaste m_frozen_sp->GetValue().GetData (m_frozen_sp->GetDataExtractor()); 107254721Semaste } 108254721Semaste return const_cast<uint8_t *>(m_frozen_sp->GetDataExtractor().GetDataStart()); 109254721Semaste } 110254721Semaste return NULL; 111254721Semaste} 112254721Semaste 113254721Semastevoid 114254721SemasteClangExpressionVariable::SetName (const ConstString &name) 115254721Semaste{ 116254721Semaste m_frozen_sp->SetName (name); 117254721Semaste} 118254721Semaste 119254721Semastevoid 120254721SemasteClangExpressionVariable::ValueUpdated () 121254721Semaste{ 122254721Semaste m_frozen_sp->ValueUpdated (); 123254721Semaste} 124254721Semaste 125254721Semastevoid 126254721SemasteClangExpressionVariable::TransferAddress (bool force) 127254721Semaste{ 128254721Semaste if (m_live_sp.get() == NULL) 129254721Semaste return; 130254721Semaste 131254721Semaste if (m_frozen_sp.get() == NULL) 132254721Semaste return; 133254721Semaste 134254721Semaste if (force || (m_frozen_sp->GetLiveAddress() == LLDB_INVALID_ADDRESS)) 135254721Semaste m_frozen_sp->SetLiveAddress(m_live_sp->GetLiveAddress()); 136254721Semaste} 137