blob: 79a7e4f2fb940e63759fe0b288cd135509c9b338 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- ClangExpressionVariable.cpp -----------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Expression/ClangExpressionVariable.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "clang/AST/ASTContext.h"
Sean Callanana6223432010-08-20 01:02:30 +000017#include "lldb/Core/ConstString.h"
18#include "lldb/Core/DataExtractor.h"
19#include "lldb/Core/Stream.h"
20#include "lldb/Core/Value.h"
Greg Clayton66ed2fb2010-10-05 00:00:42 +000021#include "lldb/Core/ValueObjectConstResult.h"
Sean Callanane8a59a82010-09-13 21:34:21 +000022#include "lldb/Target/ExecutionContext.h"
23#include "lldb/Target/Process.h"
Chris Lattner24943d22010-06-08 16:52:24 +000024
25using namespace lldb_private;
26using namespace clang;
27
Greg Clayton427f2902010-12-14 02:59:59 +000028ClangExpressionVariable::ClangExpressionVariable(lldb::ByteOrder byte_order, uint32_t addr_byte_size) :
Greg Clayton66ed2fb2010-10-05 00:00:42 +000029 m_parser_vars(),
30 m_jit_vars (),
Greg Clayton427f2902010-12-14 02:59:59 +000031 m_valojb_sp (new ValueObjectConstResult(byte_order, addr_byte_size))
Chris Lattner24943d22010-06-08 16:52:24 +000032{
33}
34
Greg Clayton427f2902010-12-14 02:59:59 +000035ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) :
36 m_parser_vars(),
37 m_jit_vars (),
38 m_valojb_sp (valobj_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000039{
Chris Lattner24943d22010-06-08 16:52:24 +000040}
41
Greg Clayton427f2902010-12-14 02:59:59 +000042//----------------------------------------------------------------------
43/// Return the variable's size in bytes
44//----------------------------------------------------------------------
45size_t
46ClangExpressionVariable::GetByteSize ()
Chris Lattner24943d22010-06-08 16:52:24 +000047{
Greg Clayton427f2902010-12-14 02:59:59 +000048 return m_valojb_sp->GetByteSize();
49}
Sean Callanana6223432010-08-20 01:02:30 +000050
Greg Clayton427f2902010-12-14 02:59:59 +000051const ConstString &
52ClangExpressionVariable::GetName ()
Sean Callanana6223432010-08-20 01:02:30 +000053{
Greg Clayton427f2902010-12-14 02:59:59 +000054 return m_valojb_sp->GetName();
55}
Greg Clayton66ed2fb2010-10-05 00:00:42 +000056
57lldb::ValueObjectSP
Greg Clayton427f2902010-12-14 02:59:59 +000058ClangExpressionVariable::GetValueObject()
Greg Clayton66ed2fb2010-10-05 00:00:42 +000059{
Greg Clayton427f2902010-12-14 02:59:59 +000060 return m_valojb_sp;
61}
62
63lldb::RegisterInfo *
64ClangExpressionVariable::GetRegisterInfo()
65{
66 return m_valojb_sp->GetValue().GetRegisterInfo();
67}
68
69void
70ClangExpressionVariable::SetRegisterInfo (const lldb::RegisterInfo *reg_info)
71{
72 return m_valojb_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<lldb::RegisterInfo *>(reg_info));
73}
74
75lldb::clang_type_t
76ClangExpressionVariable::GetClangType()
77{
78 return m_valojb_sp->GetClangType();
79}
80
81void
82ClangExpressionVariable::SetClangType(lldb::clang_type_t clang_type)
83{
84 m_valojb_sp->GetValue().SetContext(Value::eContextTypeClangType, clang_type);
85}
86
87clang::ASTContext *
88ClangExpressionVariable::GetClangAST()
89{
90 return m_valojb_sp->GetClangAST();
91}
92
93void
94ClangExpressionVariable::SetClangAST (clang::ASTContext *ast)
95{
96 m_valojb_sp->SetClangAST (ast);
97}
98
99TypeFromUser
100ClangExpressionVariable::GetTypeFromUser()
101{
102 TypeFromUser tfu (m_valojb_sp->GetClangType(), m_valojb_sp->GetClangAST());
103 return tfu;
104}
105
106uint8_t *
107ClangExpressionVariable::GetValueBytes()
108{
109 const size_t byte_size = m_valojb_sp->GetByteSize();
110 if (byte_size > 0)
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000111 {
Greg Clayton427f2902010-12-14 02:59:59 +0000112 if (m_valojb_sp->GetDataExtractor().GetByteSize() < byte_size)
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000113 {
Greg Clayton427f2902010-12-14 02:59:59 +0000114 m_valojb_sp->GetValue().ResizeData(byte_size);
115 m_valojb_sp->GetValue().GetData (m_valojb_sp->GetDataExtractor());
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000116 }
Greg Clayton427f2902010-12-14 02:59:59 +0000117 return const_cast<uint8_t *>(m_valojb_sp->GetDataExtractor().GetDataStart());
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000118 }
Greg Clayton427f2902010-12-14 02:59:59 +0000119 return NULL;
120}
121
122void
123ClangExpressionVariable::SetName (const ConstString &name)
124{
125 m_valojb_sp->SetName (name);
126}
127
128void
129ClangExpressionVariable::ValueUpdated ()
130{
131 m_valojb_sp->ValueUpdated ();
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000132}
133