124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ClangExpressionVariable.cpp -----------------------------*- 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#include "lldb/Expression/ClangExpressionVariable.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "clang/AST/ASTContext.h" 17a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Core/ConstString.h" 18a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Core/DataExtractor.h" 19a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Core/Stream.h" 20a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Core/Value.h" 2166ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton#include "lldb/Core/ValueObjectConstResult.h" 22e8a59a8ec92e71203e434f28b5bac6606aacaf3cSean Callanan#include "lldb/Target/ExecutionContext.h" 23e8a59a8ec92e71203e434f28b5bac6606aacaf3cSean Callanan#include "lldb/Target/Process.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace clang; 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim InghamClangExpressionVariable::ClangExpressionVariable(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size) : 2966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_parser_vars(), 3066ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_jit_vars (), 31dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson m_flags (EVNone), 3247da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham m_frozen_sp (ValueObjectConstResult::Create (exe_scope, byte_order, addr_byte_size)) 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) : 37427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_parser_vars(), 38427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_jit_vars (), 39dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson m_flags (EVNone), 40dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson m_frozen_sp (valobj_sp) 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton//---------------------------------------------------------------------- 45427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton/// Return the variable's size in bytes 46427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton//---------------------------------------------------------------------- 47427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonsize_t 48427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetByteSize () 49427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 506a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return m_frozen_sp->GetByteSize(); 51427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 52324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham 53427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonconst ConstString & 54427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetName () 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 566a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return m_frozen_sp->GetName(); 57427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 58427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 59427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonlldb::ValueObjectSP 60427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetValueObject() 61427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 626a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return m_frozen_sp; 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 65b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonRegisterInfo * 66427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetRegisterInfo() 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 686a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return m_frozen_sp->GetValue().GetRegisterInfo(); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7066ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 71427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonvoid 72b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonClangExpressionVariable::SetRegisterInfo (const RegisterInfo *reg_info) 7366ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton{ 74b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info)); 7566ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton} 7666ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 7752f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangASTType 78427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetClangType() 79427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 806a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return m_frozen_sp->GetClangType(); 81427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 82427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 83427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonvoid 8452f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangExpressionVariable::SetClangType(const ClangASTType &clang_type) 85427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 8652f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_frozen_sp->GetValue().SetClangType(clang_type); 87427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 88427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 89427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 90427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonTypeFromUser 91427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetTypeFromUser() 92427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 9352f792329be5db8e38961350589e97e8f2823acdGreg Clayton TypeFromUser tfu (m_frozen_sp->GetClangType()); 94427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return tfu; 95427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 96427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 97427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonuint8_t * 98427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::GetValueBytes() 9966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton{ 1006a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan const size_t byte_size = m_frozen_sp->GetByteSize(); 101427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton if (byte_size > 0) 10266ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton { 1036a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan if (m_frozen_sp->GetDataExtractor().GetByteSize() < byte_size) 10466ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton { 1056a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan m_frozen_sp->GetValue().ResizeData(byte_size); 1066a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan m_frozen_sp->GetValue().GetData (m_frozen_sp->GetDataExtractor()); 10766ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton } 1086a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan return const_cast<uint8_t *>(m_frozen_sp->GetDataExtractor().GetDataStart()); 10966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton } 110427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return NULL; 111427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 112427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 113427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonvoid 114427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::SetName (const ConstString &name) 115427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 1166a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan m_frozen_sp->SetName (name); 117427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton} 118427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 119427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonvoid 120427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg ClaytonClangExpressionVariable::ValueUpdated () 121427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton{ 1226a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan m_frozen_sp->ValueUpdated (); 12366ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton} 12466ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 125c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chenvoid 126c61349681fa2923bd30ad16afce450a0da6108cfJohnny ChenClangExpressionVariable::TransferAddress (bool force) 127c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen{ 128c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen if (m_live_sp.get() == NULL) 129c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen return; 130c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen 131c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen if (m_frozen_sp.get() == NULL) 132c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen return; 133c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen 134c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen if (force || (m_frozen_sp->GetLiveAddress() == LLDB_INVALID_ADDRESS)) 135c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen m_frozen_sp->SetLiveAddress(m_live_sp->GetLiveAddress()); 136c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen} 137