mirror of
https://github.com/intel/llvm.git
synced 2026-01-24 17:01:00 +08:00
public types and public enums. This was done to keep the SWIG stuff from parsing all sorts of enums and types that weren't needed, and allows us to abstract our API better. llvm-svn: 128239
136 lines
3.3 KiB
C++
136 lines
3.3 KiB
C++
//===-- 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(lldb::ByteOrder byte_order, uint32_t addr_byte_size) :
|
|
m_parser_vars(),
|
|
m_jit_vars (),
|
|
m_frozen_sp (new ValueObjectConstResult(byte_order, addr_byte_size)),
|
|
m_flags (EVNone)
|
|
{
|
|
}
|
|
|
|
ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) :
|
|
m_parser_vars(),
|
|
m_jit_vars (),
|
|
m_frozen_sp (valobj_sp),
|
|
m_flags (EVNone)
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
/// 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));
|
|
}
|
|
|
|
lldb::clang_type_t
|
|
ClangExpressionVariable::GetClangType()
|
|
{
|
|
return m_frozen_sp->GetClangType();
|
|
}
|
|
|
|
void
|
|
ClangExpressionVariable::SetClangType(lldb::clang_type_t clang_type)
|
|
{
|
|
m_frozen_sp->GetValue().SetContext(Value::eContextTypeClangType, clang_type);
|
|
}
|
|
|
|
clang::ASTContext *
|
|
ClangExpressionVariable::GetClangAST()
|
|
{
|
|
return m_frozen_sp->GetClangAST();
|
|
}
|
|
|
|
void
|
|
ClangExpressionVariable::SetClangAST (clang::ASTContext *ast)
|
|
{
|
|
m_frozen_sp->SetClangAST (ast);
|
|
}
|
|
|
|
TypeFromUser
|
|
ClangExpressionVariable::GetTypeFromUser()
|
|
{
|
|
TypeFromUser tfu (m_frozen_sp->GetClangType(), m_frozen_sp->GetClangAST());
|
|
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 ();
|
|
}
|
|
|