1//===-- SBBlock.h -----------------------------------------------*- 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#ifndef LLDB_SBBlock_h_
11#define LLDB_SBBlock_h_
12
13#include "lldb/API/SBDefines.h"
14#include "lldb/API/SBFrame.h"
15#include "lldb/API/SBTarget.h"
16#include "lldb/API/SBValueList.h"
17
18namespace lldb {
19
20class SBBlock
21{
22public:
23
24    SBBlock ();
25
26    SBBlock (const lldb::SBBlock &rhs);
27
28    ~SBBlock ();
29
30    const lldb::SBBlock &
31    operator = (const lldb::SBBlock &rhs);
32
33    bool
34    IsInlined () const;
35
36    bool
37    IsValid () const;
38
39    const char *
40    GetInlinedName () const;
41
42    lldb::SBFileSpec
43    GetInlinedCallSiteFile () const;
44
45    uint32_t
46    GetInlinedCallSiteLine () const;
47
48    uint32_t
49    GetInlinedCallSiteColumn () const;
50
51    lldb::SBBlock
52    GetParent ();
53
54    lldb::SBBlock
55    GetSibling ();
56
57    lldb::SBBlock
58    GetFirstChild ();
59
60    uint32_t
61    GetNumRanges ();
62
63    lldb::SBAddress
64    GetRangeStartAddress (uint32_t idx);
65
66    lldb::SBAddress
67    GetRangeEndAddress (uint32_t idx);
68
69    uint32_t
70    GetRangeIndexForBlockAddress (lldb::SBAddress block_addr);
71
72    lldb::SBValueList
73    GetVariables (lldb::SBFrame& frame,
74                  bool arguments,
75                  bool locals,
76                  bool statics,
77                  lldb::DynamicValueType use_dynamic);
78
79    lldb::SBValueList
80    GetVariables (lldb::SBTarget& target,
81                  bool arguments,
82                  bool locals,
83                  bool statics);
84    //------------------------------------------------------------------
85    /// Get the inlined block that contains this block.
86    ///
87    /// @return
88    ///     If this block is inlined, it will return this block, else
89    ///     parent blocks will be searched to see if any contain this
90    ///     block and are themselves inlined. An invalid SBBlock will
91    ///     be returned if this block nor any parent blocks are inlined
92    ///     function blocks.
93    //------------------------------------------------------------------
94    lldb::SBBlock
95    GetContainingInlinedBlock ();
96
97    bool
98    GetDescription (lldb::SBStream &description);
99
100private:
101    friend class SBAddress;
102    friend class SBFrame;
103    friend class SBFunction;
104    friend class SBSymbolContext;
105
106    lldb_private::Block *
107    GetPtr ();
108
109    void
110    SetPtr (lldb_private::Block *lldb_object_ptr);
111
112    SBBlock (lldb_private::Block *lldb_object_ptr);
113
114    void
115    AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list);
116
117    lldb_private::Block *m_opaque_ptr;
118};
119
120
121} // namespace lldb
122
123#endif // LLDB_SBBlock_h_
124