diff options
author | emaste <emaste@FreeBSD.org> | 2013-08-23 18:06:42 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2013-08-23 18:06:42 +0000 |
commit | 424d4dadd208e2a1e9a43c3d55f47f03ba0c4509 (patch) | |
tree | 05d762b98a499804ce690e6ce04033f1ddf4dee6 /contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp | |
parent | cde487f27a84e02a560384f75178fddca68740f6 (diff) | |
parent | dcd15f81789e389c1cb27d264fcdddfd0a6002bd (diff) | |
download | FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.zip FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.tar.gz |
Merge lldb r188801 to contrib/llvm/tools/lldb/
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp b/contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp new file mode 100644 index 0000000..0d355ce --- /dev/null +++ b/contrib/llvm/tools/lldb/source/Expression/ClangExpressionVariable.cpp @@ -0,0 +1,136 @@ +//===-- ClangExpressionVariable.cpp -----------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Expression/ClangExpressionVariable.h" + +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes +#include "clang/AST/ASTContext.h" +#include "lldb/Core/ConstString.h" +#include "lldb/Core/DataExtractor.h" +#include "lldb/Core/Stream.h" +#include "lldb/Core/Value.h" +#include "lldb/Core/ValueObjectConstResult.h" +#include "lldb/Target/ExecutionContext.h" +#include "lldb/Target/Process.h" + +using namespace lldb_private; +using namespace clang; + +ClangExpressionVariable::ClangExpressionVariable(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size) : + m_parser_vars(), + m_jit_vars (), + m_flags (EVNone), + m_frozen_sp (ValueObjectConstResult::Create (exe_scope, byte_order, addr_byte_size)) +{ +} + +ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) : + m_parser_vars(), + m_jit_vars (), + m_flags (EVNone), + m_frozen_sp (valobj_sp) +{ +} + +//---------------------------------------------------------------------- +/// Return the variable's size in bytes +//---------------------------------------------------------------------- +size_t +ClangExpressionVariable::GetByteSize () +{ + return m_frozen_sp->GetByteSize(); +} + +const ConstString & +ClangExpressionVariable::GetName () +{ + return m_frozen_sp->GetName(); +} + +lldb::ValueObjectSP +ClangExpressionVariable::GetValueObject() +{ + return m_frozen_sp; +} + +RegisterInfo * +ClangExpressionVariable::GetRegisterInfo() +{ + return m_frozen_sp->GetValue().GetRegisterInfo(); +} + +void +ClangExpressionVariable::SetRegisterInfo (const RegisterInfo *reg_info) +{ + return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info)); +} + +ClangASTType +ClangExpressionVariable::GetClangType() +{ + return m_frozen_sp->GetClangType(); +} + +void +ClangExpressionVariable::SetClangType(const ClangASTType &clang_type) +{ + m_frozen_sp->GetValue().SetClangType(clang_type); +} + + +TypeFromUser +ClangExpressionVariable::GetTypeFromUser() +{ + TypeFromUser tfu (m_frozen_sp->GetClangType()); + return tfu; +} + +uint8_t * +ClangExpressionVariable::GetValueBytes() +{ + const size_t byte_size = m_frozen_sp->GetByteSize(); + if (byte_size > 0) + { + if (m_frozen_sp->GetDataExtractor().GetByteSize() < byte_size) + { + m_frozen_sp->GetValue().ResizeData(byte_size); + m_frozen_sp->GetValue().GetData (m_frozen_sp->GetDataExtractor()); + } + return const_cast<uint8_t *>(m_frozen_sp->GetDataExtractor().GetDataStart()); + } + return NULL; +} + +void +ClangExpressionVariable::SetName (const ConstString &name) +{ + m_frozen_sp->SetName (name); +} + +void +ClangExpressionVariable::ValueUpdated () +{ + m_frozen_sp->ValueUpdated (); +} + +void +ClangExpressionVariable::TransferAddress (bool force) +{ + if (m_live_sp.get() == NULL) + return; + + if (m_frozen_sp.get() == NULL) + return; + + if (force || (m_frozen_sp->GetLiveAddress() == LLDB_INVALID_ADDRESS)) + m_frozen_sp->SetLiveAddress(m_live_sp->GetLiveAddress()); +} |