180814287SRaphael Isemann //===-- SBBlock.cpp -------------------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
930fdc8d8SChris Lattner #include "lldb/API/SBBlock.h"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
118f7180b1SGreg Clayton #include "lldb/API/SBAddress.h"
1295897c6aSGreg Clayton #include "lldb/API/SBFileSpec.h"
135569e64eSGreg Clayton #include "lldb/API/SBFrame.h"
14dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
155569e64eSGreg Clayton #include "lldb/API/SBValue.h"
168f7180b1SGreg Clayton #include "lldb/Core/AddressRange.h"
175569e64eSGreg Clayton #include "lldb/Core/ValueObjectVariable.h"
1830fdc8d8SChris Lattner #include "lldb/Symbol/Block.h"
1995897c6aSGreg Clayton #include "lldb/Symbol/Function.h"
20dde9cff3SCaroline Tice #include "lldb/Symbol/SymbolContext.h"
215569e64eSGreg Clayton #include "lldb/Symbol/VariableList.h"
22b57e4a1bSJason Molenda #include "lldb/Target/StackFrame.h"
235569e64eSGreg Clayton #include "lldb/Target/Target.h"
2430fdc8d8SChris Lattner 
2530fdc8d8SChris Lattner using namespace lldb;
2695897c6aSGreg Clayton using namespace lldb_private;
2730fdc8d8SChris Lattner 
28248a1305SKonrad Kleine SBBlock::SBBlock() : m_opaque_ptr(nullptr) {
29baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBBlock);
30baf5664fSJonas Devlieghere }
3130fdc8d8SChris Lattner 
32b9c1b51eSKate Stone SBBlock::SBBlock(lldb_private::Block *lldb_object_ptr)
33b9c1b51eSKate Stone     : m_opaque_ptr(lldb_object_ptr) {}
3430fdc8d8SChris Lattner 
35baf5664fSJonas Devlieghere SBBlock::SBBlock(const SBBlock &rhs) : m_opaque_ptr(rhs.m_opaque_ptr) {
36baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBBlock, (const lldb::SBBlock &), rhs);
37baf5664fSJonas Devlieghere }
3830fdc8d8SChris Lattner 
39b9c1b51eSKate Stone const SBBlock &SBBlock::operator=(const SBBlock &rhs) {
40baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBBlock &,
41baf5664fSJonas Devlieghere                      SBBlock, operator=,(const lldb::SBBlock &), rhs);
42baf5664fSJonas Devlieghere 
43efabb123SGreg Clayton   m_opaque_ptr = rhs.m_opaque_ptr;
44306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
45efabb123SGreg Clayton }
46efabb123SGreg Clayton 
47248a1305SKonrad Kleine SBBlock::~SBBlock() { m_opaque_ptr = nullptr; }
4830fdc8d8SChris Lattner 
49baf5664fSJonas Devlieghere bool SBBlock::IsValid() const {
50baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, IsValid);
517f5237bcSPavel Labath   return this->operator bool();
527f5237bcSPavel Labath }
537f5237bcSPavel Labath SBBlock::operator bool() const {
547f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, operator bool);
55baf5664fSJonas Devlieghere 
56248a1305SKonrad Kleine   return m_opaque_ptr != nullptr;
57baf5664fSJonas Devlieghere }
5830fdc8d8SChris Lattner 
59b9c1b51eSKate Stone bool SBBlock::IsInlined() const {
60baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, IsInlined);
61baf5664fSJonas Devlieghere 
6295897c6aSGreg Clayton   if (m_opaque_ptr)
63248a1305SKonrad Kleine     return m_opaque_ptr->GetInlinedFunctionInfo() != nullptr;
6495897c6aSGreg Clayton   return false;
6595897c6aSGreg Clayton }
6695897c6aSGreg Clayton 
67b9c1b51eSKate Stone const char *SBBlock::GetInlinedName() const {
68baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBlock, GetInlinedName);
69baf5664fSJonas Devlieghere 
70b9c1b51eSKate Stone   if (m_opaque_ptr) {
71b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
72b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
73b9c1b51eSKate Stone     if (inlined_info) {
74*22b04487SAlex Langford       return inlined_info->GetName().AsCString(nullptr);
75ddaf6a72SGreg Clayton     }
7695897c6aSGreg Clayton   }
77248a1305SKonrad Kleine   return nullptr;
7895897c6aSGreg Clayton }
7995897c6aSGreg Clayton 
80b9c1b51eSKate Stone SBFileSpec SBBlock::GetInlinedCallSiteFile() const {
81baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBBlock,
82baf5664fSJonas Devlieghere                                    GetInlinedCallSiteFile);
83baf5664fSJonas Devlieghere 
8495897c6aSGreg Clayton   SBFileSpec sb_file;
85b9c1b51eSKate Stone   if (m_opaque_ptr) {
86b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
87b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
8895897c6aSGreg Clayton     if (inlined_info)
8995897c6aSGreg Clayton       sb_file.SetFileSpec(inlined_info->GetCallSite().GetFile());
9095897c6aSGreg Clayton   }
91baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_file);
9295897c6aSGreg Clayton }
9395897c6aSGreg Clayton 
94b9c1b51eSKate Stone uint32_t SBBlock::GetInlinedCallSiteLine() const {
95baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteLine);
96baf5664fSJonas Devlieghere 
97b9c1b51eSKate Stone   if (m_opaque_ptr) {
98b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
99b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
10095897c6aSGreg Clayton     if (inlined_info)
10195897c6aSGreg Clayton       return inlined_info->GetCallSite().GetLine();
10295897c6aSGreg Clayton   }
10395897c6aSGreg Clayton   return 0;
10495897c6aSGreg Clayton }
10595897c6aSGreg Clayton 
106b9c1b51eSKate Stone uint32_t SBBlock::GetInlinedCallSiteColumn() const {
107baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteColumn);
108baf5664fSJonas Devlieghere 
109b9c1b51eSKate Stone   if (m_opaque_ptr) {
110b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
111b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
11295897c6aSGreg Clayton     if (inlined_info)
11395897c6aSGreg Clayton       return inlined_info->GetCallSite().GetColumn();
11495897c6aSGreg Clayton   }
11595897c6aSGreg Clayton   return 0;
11695897c6aSGreg Clayton }
11795897c6aSGreg Clayton 
118b9c1b51eSKate Stone void SBBlock::AppendVariables(bool can_create, bool get_parent_variables,
119b9c1b51eSKate Stone                               lldb_private::VariableList *var_list) {
120b9c1b51eSKate Stone   if (IsValid()) {
1211b72fcb7SGreg Clayton     bool show_inline = true;
122b9c1b51eSKate Stone     m_opaque_ptr->AppendVariables(can_create, get_parent_variables, show_inline,
123b9c1b51eSKate Stone                                   [](Variable *) { return true; }, var_list);
12430fdc8d8SChris Lattner   }
12530fdc8d8SChris Lattner }
12630fdc8d8SChris Lattner 
127b9c1b51eSKate Stone SBBlock SBBlock::GetParent() {
128baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetParent);
129baf5664fSJonas Devlieghere 
13095897c6aSGreg Clayton   SBBlock sb_block;
13195897c6aSGreg Clayton   if (m_opaque_ptr)
13295897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetParent();
133baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
13495897c6aSGreg Clayton }
13595897c6aSGreg Clayton 
136b9c1b51eSKate Stone lldb::SBBlock SBBlock::GetContainingInlinedBlock() {
137baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetContainingInlinedBlock);
138baf5664fSJonas Devlieghere 
1398f7180b1SGreg Clayton   SBBlock sb_block;
1408f7180b1SGreg Clayton   if (m_opaque_ptr)
1418f7180b1SGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetContainingInlinedBlock();
142baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
1438f7180b1SGreg Clayton }
1448f7180b1SGreg Clayton 
145b9c1b51eSKate Stone SBBlock SBBlock::GetSibling() {
146baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetSibling);
147baf5664fSJonas Devlieghere 
14895897c6aSGreg Clayton   SBBlock sb_block;
14995897c6aSGreg Clayton   if (m_opaque_ptr)
15095897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling();
151baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
15295897c6aSGreg Clayton }
15395897c6aSGreg Clayton 
154b9c1b51eSKate Stone SBBlock SBBlock::GetFirstChild() {
155baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetFirstChild);
156baf5664fSJonas Devlieghere 
15795897c6aSGreg Clayton   SBBlock sb_block;
15895897c6aSGreg Clayton   if (m_opaque_ptr)
15995897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild();
160baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
16195897c6aSGreg Clayton }
16295897c6aSGreg Clayton 
163b9c1b51eSKate Stone lldb_private::Block *SBBlock::GetPtr() { return m_opaque_ptr; }
1644838131bSGreg Clayton 
165b9c1b51eSKate Stone void SBBlock::SetPtr(lldb_private::Block *block) { m_opaque_ptr = block; }
16630fdc8d8SChris Lattner 
167b9c1b51eSKate Stone bool SBBlock::GetDescription(SBStream &description) {
168baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &),
169baf5664fSJonas Devlieghere                      description);
170baf5664fSJonas Devlieghere 
171da7bc7d0SGreg Clayton   Stream &strm = description.ref();
172da7bc7d0SGreg Clayton 
173b9c1b51eSKate Stone   if (m_opaque_ptr) {
174dde9cff3SCaroline Tice     lldb::user_id_t id = m_opaque_ptr->GetID();
175d01b2953SDaniel Malea     strm.Printf("Block: {id: %" PRIu64 "} ", id);
176b9c1b51eSKate Stone     if (IsInlined()) {
177da7bc7d0SGreg Clayton       strm.Printf(" (inlined, '%s') ", GetInlinedName());
178dde9cff3SCaroline Tice     }
179dde9cff3SCaroline Tice     lldb_private::SymbolContext sc;
180dde9cff3SCaroline Tice     m_opaque_ptr->CalculateSymbolContext(&sc);
181b9c1b51eSKate Stone     if (sc.function) {
182b9c1b51eSKate Stone       m_opaque_ptr->DumpAddressRanges(
183b9c1b51eSKate Stone           &strm,
184dde9cff3SCaroline Tice           sc.function->GetAddressRange().GetBaseAddress().GetFileAddress());
185dde9cff3SCaroline Tice     }
186b9c1b51eSKate Stone   } else
187da7bc7d0SGreg Clayton     strm.PutCString("No value");
18830fdc8d8SChris Lattner 
189dde9cff3SCaroline Tice   return true;
190dde9cff3SCaroline Tice }
1918f7180b1SGreg Clayton 
192b9c1b51eSKate Stone uint32_t SBBlock::GetNumRanges() {
193baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBBlock, GetNumRanges);
194baf5664fSJonas Devlieghere 
1958f7180b1SGreg Clayton   if (m_opaque_ptr)
1968f7180b1SGreg Clayton     return m_opaque_ptr->GetNumRanges();
1978f7180b1SGreg Clayton   return 0;
1988f7180b1SGreg Clayton }
1998f7180b1SGreg Clayton 
200b9c1b51eSKate Stone lldb::SBAddress SBBlock::GetRangeStartAddress(uint32_t idx) {
201baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress, (uint32_t),
202baf5664fSJonas Devlieghere                      idx);
203baf5664fSJonas Devlieghere 
2048f7180b1SGreg Clayton   lldb::SBAddress sb_addr;
205b9c1b51eSKate Stone   if (m_opaque_ptr) {
2068f7180b1SGreg Clayton     AddressRange range;
207b9c1b51eSKate Stone     if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2088f7180b1SGreg Clayton       sb_addr.ref() = range.GetBaseAddress();
2098f7180b1SGreg Clayton     }
2108f7180b1SGreg Clayton   }
211baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
2128f7180b1SGreg Clayton }
2138f7180b1SGreg Clayton 
214b9c1b51eSKate Stone lldb::SBAddress SBBlock::GetRangeEndAddress(uint32_t idx) {
215baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress, (uint32_t),
216baf5664fSJonas Devlieghere                      idx);
217baf5664fSJonas Devlieghere 
2188f7180b1SGreg Clayton   lldb::SBAddress sb_addr;
219b9c1b51eSKate Stone   if (m_opaque_ptr) {
2208f7180b1SGreg Clayton     AddressRange range;
221b9c1b51eSKate Stone     if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2228f7180b1SGreg Clayton       sb_addr.ref() = range.GetBaseAddress();
2238f7180b1SGreg Clayton       sb_addr.ref().Slide(range.GetByteSize());
2248f7180b1SGreg Clayton     }
2258f7180b1SGreg Clayton   }
226baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
2278f7180b1SGreg Clayton }
2288f7180b1SGreg Clayton 
229b9c1b51eSKate Stone uint32_t SBBlock::GetRangeIndexForBlockAddress(lldb::SBAddress block_addr) {
230baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
231baf5664fSJonas Devlieghere                      (lldb::SBAddress), block_addr);
232baf5664fSJonas Devlieghere 
233b9c1b51eSKate Stone   if (m_opaque_ptr && block_addr.IsValid()) {
234ea3e7d5cSGreg Clayton     return m_opaque_ptr->GetRangeIndexContainingAddress(block_addr.ref());
2358f7180b1SGreg Clayton   }
2368f7180b1SGreg Clayton 
2378f7180b1SGreg Clayton   return UINT32_MAX;
2388f7180b1SGreg Clayton }
2398f7180b1SGreg Clayton 
240b9c1b51eSKate Stone lldb::SBValueList SBBlock::GetVariables(lldb::SBFrame &frame, bool arguments,
241b9c1b51eSKate Stone                                         bool locals, bool statics,
242b9c1b51eSKate Stone                                         lldb::DynamicValueType use_dynamic) {
243baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
244baf5664fSJonas Devlieghere       lldb::SBValueList, SBBlock, GetVariables,
245baf5664fSJonas Devlieghere       (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType), frame,
246baf5664fSJonas Devlieghere       arguments, locals, statics, use_dynamic);
247baf5664fSJonas Devlieghere 
2485569e64eSGreg Clayton   Block *block = GetPtr();
2495569e64eSGreg Clayton   SBValueList value_list;
250b9c1b51eSKate Stone   if (block) {
251b57e4a1bSJason Molenda     StackFrameSP frame_sp(frame.GetFrameSP());
2525569e64eSGreg Clayton     VariableListSP variable_list_sp(block->GetBlockVariableList(true));
2535569e64eSGreg Clayton 
254b9c1b51eSKate Stone     if (variable_list_sp) {
2555569e64eSGreg Clayton       const size_t num_variables = variable_list_sp->GetSize();
256b9c1b51eSKate Stone       if (num_variables) {
257b9c1b51eSKate Stone         for (size_t i = 0; i < num_variables; ++i) {
2585569e64eSGreg Clayton           VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
259b9c1b51eSKate Stone           if (variable_sp) {
2605569e64eSGreg Clayton             bool add_variable = false;
261b9c1b51eSKate Stone             switch (variable_sp->GetScope()) {
2625569e64eSGreg Clayton             case eValueTypeVariableGlobal:
2635569e64eSGreg Clayton             case eValueTypeVariableStatic:
26463a27afaSGreg Clayton             case eValueTypeVariableThreadLocal:
2655569e64eSGreg Clayton               add_variable = statics;
2665569e64eSGreg Clayton               break;
2675569e64eSGreg Clayton 
2685569e64eSGreg Clayton             case eValueTypeVariableArgument:
2695569e64eSGreg Clayton               add_variable = arguments;
2705569e64eSGreg Clayton               break;
2715569e64eSGreg Clayton 
2725569e64eSGreg Clayton             case eValueTypeVariableLocal:
2735569e64eSGreg Clayton               add_variable = locals;
2745569e64eSGreg Clayton               break;
2755569e64eSGreg Clayton 
2765569e64eSGreg Clayton             default:
2775569e64eSGreg Clayton               break;
2785569e64eSGreg Clayton             }
279b9c1b51eSKate Stone             if (add_variable) {
280b9c1b51eSKate Stone               if (frame_sp) {
281b9c1b51eSKate Stone                 lldb::ValueObjectSP valobj_sp(
282b9c1b51eSKate Stone                     frame_sp->GetValueObjectForFrameVariable(variable_sp,
283b9c1b51eSKate Stone                                                              eNoDynamicValues));
284e3e91517SEnrico Granata                 SBValue value_sb;
285e3e91517SEnrico Granata                 value_sb.SetSP(valobj_sp, use_dynamic);
286e3e91517SEnrico Granata                 value_list.Append(value_sb);
287e3e91517SEnrico Granata               }
2885569e64eSGreg Clayton             }
2895569e64eSGreg Clayton           }
2905569e64eSGreg Clayton         }
2915569e64eSGreg Clayton       }
2925569e64eSGreg Clayton     }
2935569e64eSGreg Clayton   }
294baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(value_list);
2955569e64eSGreg Clayton }
2965569e64eSGreg Clayton 
297b9c1b51eSKate Stone lldb::SBValueList SBBlock::GetVariables(lldb::SBTarget &target, bool arguments,
298b9c1b51eSKate Stone                                         bool locals, bool statics) {
299baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBValueList, SBBlock, GetVariables,
300baf5664fSJonas Devlieghere                      (lldb::SBTarget &, bool, bool, bool), target, arguments,
301baf5664fSJonas Devlieghere                      locals, statics);
302baf5664fSJonas Devlieghere 
3035569e64eSGreg Clayton   Block *block = GetPtr();
3045569e64eSGreg Clayton 
3055569e64eSGreg Clayton   SBValueList value_list;
306b9c1b51eSKate Stone   if (block) {
3075569e64eSGreg Clayton     TargetSP target_sp(target.GetSP());
3085569e64eSGreg Clayton 
3095569e64eSGreg Clayton     VariableListSP variable_list_sp(block->GetBlockVariableList(true));
3105569e64eSGreg Clayton 
311b9c1b51eSKate Stone     if (variable_list_sp) {
3125569e64eSGreg Clayton       const size_t num_variables = variable_list_sp->GetSize();
313b9c1b51eSKate Stone       if (num_variables) {
314b9c1b51eSKate Stone         for (size_t i = 0; i < num_variables; ++i) {
3155569e64eSGreg Clayton           VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
316b9c1b51eSKate Stone           if (variable_sp) {
3175569e64eSGreg Clayton             bool add_variable = false;
318b9c1b51eSKate Stone             switch (variable_sp->GetScope()) {
3195569e64eSGreg Clayton             case eValueTypeVariableGlobal:
3205569e64eSGreg Clayton             case eValueTypeVariableStatic:
32163a27afaSGreg Clayton             case eValueTypeVariableThreadLocal:
3225569e64eSGreg Clayton               add_variable = statics;
3235569e64eSGreg Clayton               break;
3245569e64eSGreg Clayton 
3255569e64eSGreg Clayton             case eValueTypeVariableArgument:
3265569e64eSGreg Clayton               add_variable = arguments;
3275569e64eSGreg Clayton               break;
3285569e64eSGreg Clayton 
3295569e64eSGreg Clayton             case eValueTypeVariableLocal:
3305569e64eSGreg Clayton               add_variable = locals;
3315569e64eSGreg Clayton               break;
3325569e64eSGreg Clayton 
3335569e64eSGreg Clayton             default:
3345569e64eSGreg Clayton               break;
3355569e64eSGreg Clayton             }
336b9c1b51eSKate Stone             if (add_variable) {
3375569e64eSGreg Clayton               if (target_sp)
338b9c1b51eSKate Stone                 value_list.Append(
339b9c1b51eSKate Stone                     ValueObjectVariable::Create(target_sp.get(), variable_sp));
3405569e64eSGreg Clayton             }
3415569e64eSGreg Clayton           }
3425569e64eSGreg Clayton         }
3435569e64eSGreg Clayton       }
3445569e64eSGreg Clayton     }
3455569e64eSGreg Clayton   }
346baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(value_list);
3475569e64eSGreg Clayton }
348ae211eceSMichal Gorny 
349ae211eceSMichal Gorny namespace lldb_private {
350ae211eceSMichal Gorny namespace repro {
351ae211eceSMichal Gorny 
352ae211eceSMichal Gorny template <>
353ae211eceSMichal Gorny void RegisterMethods<SBBlock>(Registry &R) {
354ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBlock, ());
355ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBlock, (const lldb::SBBlock &));
356ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const lldb::SBBlock &,
357ae211eceSMichal Gorny                        SBBlock, operator=,(const lldb::SBBlock &));
358ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsValid, ());
359ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, operator bool, ());
360ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsInlined, ());
361ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBBlock, GetInlinedName, ());
362ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBBlock,
363ae211eceSMichal Gorny                              GetInlinedCallSiteFile, ());
364ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteLine, ());
365ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteColumn, ());
366ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetParent, ());
367ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetContainingInlinedBlock, ());
368ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetSibling, ());
369ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetFirstChild, ());
370ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &));
371ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetNumRanges, ());
372ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress,
373ae211eceSMichal Gorny                        (uint32_t));
374ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress,
375ae211eceSMichal Gorny                        (uint32_t));
376ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
377ae211eceSMichal Gorny                        (lldb::SBAddress));
378ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
379ae211eceSMichal Gorny       lldb::SBValueList, SBBlock, GetVariables,
380ae211eceSMichal Gorny       (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType));
381ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBValueList, SBBlock, GetVariables,
382ae211eceSMichal Gorny                        (lldb::SBTarget &, bool, bool, bool));
383ae211eceSMichal Gorny }
384ae211eceSMichal Gorny 
385ae211eceSMichal Gorny }
386ae211eceSMichal Gorny }
387