130fdc8d8SChris Lattner //===-- SBBlock.cpp ---------------------------------------------*- C++ -*-===//
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 
28baf5664fSJonas Devlieghere SBBlock::SBBlock() : m_opaque_ptr(NULL) {
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;
44*306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
45efabb123SGreg Clayton }
46efabb123SGreg Clayton 
47b9c1b51eSKate Stone SBBlock::~SBBlock() { m_opaque_ptr = NULL; }
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 
56baf5664fSJonas Devlieghere   return m_opaque_ptr != NULL;
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)
6395897c6aSGreg Clayton     return m_opaque_ptr->GetInlinedFunctionInfo() != NULL;
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) {
74ddaf6a72SGreg Clayton       Function *function = m_opaque_ptr->CalculateSymbolContextFunction();
75ddaf6a72SGreg Clayton       LanguageType language;
76ddaf6a72SGreg Clayton       if (function)
77ddaf6a72SGreg Clayton         language = function->GetLanguage();
78ddaf6a72SGreg Clayton       else
79ddaf6a72SGreg Clayton         language = lldb::eLanguageTypeUnknown;
80ddaf6a72SGreg Clayton       return inlined_info->GetName(language).AsCString(NULL);
81ddaf6a72SGreg Clayton     }
8295897c6aSGreg Clayton   }
8395897c6aSGreg Clayton   return NULL;
8495897c6aSGreg Clayton }
8595897c6aSGreg Clayton 
86b9c1b51eSKate Stone SBFileSpec SBBlock::GetInlinedCallSiteFile() const {
87baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBBlock,
88baf5664fSJonas Devlieghere                                    GetInlinedCallSiteFile);
89baf5664fSJonas Devlieghere 
9095897c6aSGreg Clayton   SBFileSpec sb_file;
91b9c1b51eSKate Stone   if (m_opaque_ptr) {
92b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
93b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
9495897c6aSGreg Clayton     if (inlined_info)
9595897c6aSGreg Clayton       sb_file.SetFileSpec(inlined_info->GetCallSite().GetFile());
9695897c6aSGreg Clayton   }
97baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_file);
9895897c6aSGreg Clayton }
9995897c6aSGreg Clayton 
100b9c1b51eSKate Stone uint32_t SBBlock::GetInlinedCallSiteLine() const {
101baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteLine);
102baf5664fSJonas Devlieghere 
103b9c1b51eSKate Stone   if (m_opaque_ptr) {
104b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
105b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
10695897c6aSGreg Clayton     if (inlined_info)
10795897c6aSGreg Clayton       return inlined_info->GetCallSite().GetLine();
10895897c6aSGreg Clayton   }
10995897c6aSGreg Clayton   return 0;
11095897c6aSGreg Clayton }
11195897c6aSGreg Clayton 
112b9c1b51eSKate Stone uint32_t SBBlock::GetInlinedCallSiteColumn() const {
113baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteColumn);
114baf5664fSJonas Devlieghere 
115b9c1b51eSKate Stone   if (m_opaque_ptr) {
116b9c1b51eSKate Stone     const InlineFunctionInfo *inlined_info =
117b9c1b51eSKate Stone         m_opaque_ptr->GetInlinedFunctionInfo();
11895897c6aSGreg Clayton     if (inlined_info)
11995897c6aSGreg Clayton       return inlined_info->GetCallSite().GetColumn();
12095897c6aSGreg Clayton   }
12195897c6aSGreg Clayton   return 0;
12295897c6aSGreg Clayton }
12395897c6aSGreg Clayton 
124b9c1b51eSKate Stone void SBBlock::AppendVariables(bool can_create, bool get_parent_variables,
125b9c1b51eSKate Stone                               lldb_private::VariableList *var_list) {
126b9c1b51eSKate Stone   if (IsValid()) {
1271b72fcb7SGreg Clayton     bool show_inline = true;
128b9c1b51eSKate Stone     m_opaque_ptr->AppendVariables(can_create, get_parent_variables, show_inline,
129b9c1b51eSKate Stone                                   [](Variable *) { return true; }, var_list);
13030fdc8d8SChris Lattner   }
13130fdc8d8SChris Lattner }
13230fdc8d8SChris Lattner 
133b9c1b51eSKate Stone SBBlock SBBlock::GetParent() {
134baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetParent);
135baf5664fSJonas Devlieghere 
13695897c6aSGreg Clayton   SBBlock sb_block;
13795897c6aSGreg Clayton   if (m_opaque_ptr)
13895897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetParent();
139baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
14095897c6aSGreg Clayton }
14195897c6aSGreg Clayton 
142b9c1b51eSKate Stone lldb::SBBlock SBBlock::GetContainingInlinedBlock() {
143baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetContainingInlinedBlock);
144baf5664fSJonas Devlieghere 
1458f7180b1SGreg Clayton   SBBlock sb_block;
1468f7180b1SGreg Clayton   if (m_opaque_ptr)
1478f7180b1SGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetContainingInlinedBlock();
148baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
1498f7180b1SGreg Clayton }
1508f7180b1SGreg Clayton 
151b9c1b51eSKate Stone SBBlock SBBlock::GetSibling() {
152baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetSibling);
153baf5664fSJonas Devlieghere 
15495897c6aSGreg Clayton   SBBlock sb_block;
15595897c6aSGreg Clayton   if (m_opaque_ptr)
15695897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling();
157baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
15895897c6aSGreg Clayton }
15995897c6aSGreg Clayton 
160b9c1b51eSKate Stone SBBlock SBBlock::GetFirstChild() {
161baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetFirstChild);
162baf5664fSJonas Devlieghere 
16395897c6aSGreg Clayton   SBBlock sb_block;
16495897c6aSGreg Clayton   if (m_opaque_ptr)
16595897c6aSGreg Clayton     sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild();
166baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_block);
16795897c6aSGreg Clayton }
16895897c6aSGreg Clayton 
169b9c1b51eSKate Stone lldb_private::Block *SBBlock::GetPtr() { return m_opaque_ptr; }
1704838131bSGreg Clayton 
171b9c1b51eSKate Stone void SBBlock::SetPtr(lldb_private::Block *block) { m_opaque_ptr = block; }
17230fdc8d8SChris Lattner 
173b9c1b51eSKate Stone bool SBBlock::GetDescription(SBStream &description) {
174baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &),
175baf5664fSJonas Devlieghere                      description);
176baf5664fSJonas Devlieghere 
177da7bc7d0SGreg Clayton   Stream &strm = description.ref();
178da7bc7d0SGreg Clayton 
179b9c1b51eSKate Stone   if (m_opaque_ptr) {
180dde9cff3SCaroline Tice     lldb::user_id_t id = m_opaque_ptr->GetID();
181d01b2953SDaniel Malea     strm.Printf("Block: {id: %" PRIu64 "} ", id);
182b9c1b51eSKate Stone     if (IsInlined()) {
183da7bc7d0SGreg Clayton       strm.Printf(" (inlined, '%s') ", GetInlinedName());
184dde9cff3SCaroline Tice     }
185dde9cff3SCaroline Tice     lldb_private::SymbolContext sc;
186dde9cff3SCaroline Tice     m_opaque_ptr->CalculateSymbolContext(&sc);
187b9c1b51eSKate Stone     if (sc.function) {
188b9c1b51eSKate Stone       m_opaque_ptr->DumpAddressRanges(
189b9c1b51eSKate Stone           &strm,
190dde9cff3SCaroline Tice           sc.function->GetAddressRange().GetBaseAddress().GetFileAddress());
191dde9cff3SCaroline Tice     }
192b9c1b51eSKate Stone   } else
193da7bc7d0SGreg Clayton     strm.PutCString("No value");
19430fdc8d8SChris Lattner 
195dde9cff3SCaroline Tice   return true;
196dde9cff3SCaroline Tice }
1978f7180b1SGreg Clayton 
198b9c1b51eSKate Stone uint32_t SBBlock::GetNumRanges() {
199baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBBlock, GetNumRanges);
200baf5664fSJonas Devlieghere 
2018f7180b1SGreg Clayton   if (m_opaque_ptr)
2028f7180b1SGreg Clayton     return m_opaque_ptr->GetNumRanges();
2038f7180b1SGreg Clayton   return 0;
2048f7180b1SGreg Clayton }
2058f7180b1SGreg Clayton 
206b9c1b51eSKate Stone lldb::SBAddress SBBlock::GetRangeStartAddress(uint32_t idx) {
207baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress, (uint32_t),
208baf5664fSJonas Devlieghere                      idx);
209baf5664fSJonas Devlieghere 
2108f7180b1SGreg Clayton   lldb::SBAddress sb_addr;
211b9c1b51eSKate Stone   if (m_opaque_ptr) {
2128f7180b1SGreg Clayton     AddressRange range;
213b9c1b51eSKate Stone     if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2148f7180b1SGreg Clayton       sb_addr.ref() = range.GetBaseAddress();
2158f7180b1SGreg Clayton     }
2168f7180b1SGreg Clayton   }
217baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
2188f7180b1SGreg Clayton }
2198f7180b1SGreg Clayton 
220b9c1b51eSKate Stone lldb::SBAddress SBBlock::GetRangeEndAddress(uint32_t idx) {
221baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress, (uint32_t),
222baf5664fSJonas Devlieghere                      idx);
223baf5664fSJonas Devlieghere 
2248f7180b1SGreg Clayton   lldb::SBAddress sb_addr;
225b9c1b51eSKate Stone   if (m_opaque_ptr) {
2268f7180b1SGreg Clayton     AddressRange range;
227b9c1b51eSKate Stone     if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2288f7180b1SGreg Clayton       sb_addr.ref() = range.GetBaseAddress();
2298f7180b1SGreg Clayton       sb_addr.ref().Slide(range.GetByteSize());
2308f7180b1SGreg Clayton     }
2318f7180b1SGreg Clayton   }
232baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
2338f7180b1SGreg Clayton }
2348f7180b1SGreg Clayton 
235b9c1b51eSKate Stone uint32_t SBBlock::GetRangeIndexForBlockAddress(lldb::SBAddress block_addr) {
236baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
237baf5664fSJonas Devlieghere                      (lldb::SBAddress), block_addr);
238baf5664fSJonas Devlieghere 
239b9c1b51eSKate Stone   if (m_opaque_ptr && block_addr.IsValid()) {
240ea3e7d5cSGreg Clayton     return m_opaque_ptr->GetRangeIndexContainingAddress(block_addr.ref());
2418f7180b1SGreg Clayton   }
2428f7180b1SGreg Clayton 
2438f7180b1SGreg Clayton   return UINT32_MAX;
2448f7180b1SGreg Clayton }
2458f7180b1SGreg Clayton 
246b9c1b51eSKate Stone lldb::SBValueList SBBlock::GetVariables(lldb::SBFrame &frame, bool arguments,
247b9c1b51eSKate Stone                                         bool locals, bool statics,
248b9c1b51eSKate Stone                                         lldb::DynamicValueType use_dynamic) {
249baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
250baf5664fSJonas Devlieghere       lldb::SBValueList, SBBlock, GetVariables,
251baf5664fSJonas Devlieghere       (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType), frame,
252baf5664fSJonas Devlieghere       arguments, locals, statics, use_dynamic);
253baf5664fSJonas Devlieghere 
2545569e64eSGreg Clayton   Block *block = GetPtr();
2555569e64eSGreg Clayton   SBValueList value_list;
256b9c1b51eSKate Stone   if (block) {
257b57e4a1bSJason Molenda     StackFrameSP frame_sp(frame.GetFrameSP());
2585569e64eSGreg Clayton     VariableListSP variable_list_sp(block->GetBlockVariableList(true));
2595569e64eSGreg Clayton 
260b9c1b51eSKate Stone     if (variable_list_sp) {
2615569e64eSGreg Clayton       const size_t num_variables = variable_list_sp->GetSize();
262b9c1b51eSKate Stone       if (num_variables) {
263b9c1b51eSKate Stone         for (size_t i = 0; i < num_variables; ++i) {
2645569e64eSGreg Clayton           VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
265b9c1b51eSKate Stone           if (variable_sp) {
2665569e64eSGreg Clayton             bool add_variable = false;
267b9c1b51eSKate Stone             switch (variable_sp->GetScope()) {
2685569e64eSGreg Clayton             case eValueTypeVariableGlobal:
2695569e64eSGreg Clayton             case eValueTypeVariableStatic:
27063a27afaSGreg Clayton             case eValueTypeVariableThreadLocal:
2715569e64eSGreg Clayton               add_variable = statics;
2725569e64eSGreg Clayton               break;
2735569e64eSGreg Clayton 
2745569e64eSGreg Clayton             case eValueTypeVariableArgument:
2755569e64eSGreg Clayton               add_variable = arguments;
2765569e64eSGreg Clayton               break;
2775569e64eSGreg Clayton 
2785569e64eSGreg Clayton             case eValueTypeVariableLocal:
2795569e64eSGreg Clayton               add_variable = locals;
2805569e64eSGreg Clayton               break;
2815569e64eSGreg Clayton 
2825569e64eSGreg Clayton             default:
2835569e64eSGreg Clayton               break;
2845569e64eSGreg Clayton             }
285b9c1b51eSKate Stone             if (add_variable) {
286b9c1b51eSKate Stone               if (frame_sp) {
287b9c1b51eSKate Stone                 lldb::ValueObjectSP valobj_sp(
288b9c1b51eSKate Stone                     frame_sp->GetValueObjectForFrameVariable(variable_sp,
289b9c1b51eSKate Stone                                                              eNoDynamicValues));
290e3e91517SEnrico Granata                 SBValue value_sb;
291e3e91517SEnrico Granata                 value_sb.SetSP(valobj_sp, use_dynamic);
292e3e91517SEnrico Granata                 value_list.Append(value_sb);
293e3e91517SEnrico Granata               }
2945569e64eSGreg Clayton             }
2955569e64eSGreg Clayton           }
2965569e64eSGreg Clayton         }
2975569e64eSGreg Clayton       }
2985569e64eSGreg Clayton     }
2995569e64eSGreg Clayton   }
300baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(value_list);
3015569e64eSGreg Clayton }
3025569e64eSGreg Clayton 
303b9c1b51eSKate Stone lldb::SBValueList SBBlock::GetVariables(lldb::SBTarget &target, bool arguments,
304b9c1b51eSKate Stone                                         bool locals, bool statics) {
305baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBValueList, SBBlock, GetVariables,
306baf5664fSJonas Devlieghere                      (lldb::SBTarget &, bool, bool, bool), target, arguments,
307baf5664fSJonas Devlieghere                      locals, statics);
308baf5664fSJonas Devlieghere 
3095569e64eSGreg Clayton   Block *block = GetPtr();
3105569e64eSGreg Clayton 
3115569e64eSGreg Clayton   SBValueList value_list;
312b9c1b51eSKate Stone   if (block) {
3135569e64eSGreg Clayton     TargetSP target_sp(target.GetSP());
3145569e64eSGreg Clayton 
3155569e64eSGreg Clayton     VariableListSP variable_list_sp(block->GetBlockVariableList(true));
3165569e64eSGreg Clayton 
317b9c1b51eSKate Stone     if (variable_list_sp) {
3185569e64eSGreg Clayton       const size_t num_variables = variable_list_sp->GetSize();
319b9c1b51eSKate Stone       if (num_variables) {
320b9c1b51eSKate Stone         for (size_t i = 0; i < num_variables; ++i) {
3215569e64eSGreg Clayton           VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
322b9c1b51eSKate Stone           if (variable_sp) {
3235569e64eSGreg Clayton             bool add_variable = false;
324b9c1b51eSKate Stone             switch (variable_sp->GetScope()) {
3255569e64eSGreg Clayton             case eValueTypeVariableGlobal:
3265569e64eSGreg Clayton             case eValueTypeVariableStatic:
32763a27afaSGreg Clayton             case eValueTypeVariableThreadLocal:
3285569e64eSGreg Clayton               add_variable = statics;
3295569e64eSGreg Clayton               break;
3305569e64eSGreg Clayton 
3315569e64eSGreg Clayton             case eValueTypeVariableArgument:
3325569e64eSGreg Clayton               add_variable = arguments;
3335569e64eSGreg Clayton               break;
3345569e64eSGreg Clayton 
3355569e64eSGreg Clayton             case eValueTypeVariableLocal:
3365569e64eSGreg Clayton               add_variable = locals;
3375569e64eSGreg Clayton               break;
3385569e64eSGreg Clayton 
3395569e64eSGreg Clayton             default:
3405569e64eSGreg Clayton               break;
3415569e64eSGreg Clayton             }
342b9c1b51eSKate Stone             if (add_variable) {
3435569e64eSGreg Clayton               if (target_sp)
344b9c1b51eSKate Stone                 value_list.Append(
345b9c1b51eSKate Stone                     ValueObjectVariable::Create(target_sp.get(), variable_sp));
3465569e64eSGreg Clayton             }
3475569e64eSGreg Clayton           }
3485569e64eSGreg Clayton         }
3495569e64eSGreg Clayton       }
3505569e64eSGreg Clayton     }
3515569e64eSGreg Clayton   }
352baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(value_list);
3535569e64eSGreg Clayton }
354ae211eceSMichal Gorny 
355ae211eceSMichal Gorny namespace lldb_private {
356ae211eceSMichal Gorny namespace repro {
357ae211eceSMichal Gorny 
358ae211eceSMichal Gorny template <>
359ae211eceSMichal Gorny void RegisterMethods<SBBlock>(Registry &R) {
360ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBlock, ());
361ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBBlock, (const lldb::SBBlock &));
362ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const lldb::SBBlock &,
363ae211eceSMichal Gorny                        SBBlock, operator=,(const lldb::SBBlock &));
364ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsValid, ());
365ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, operator bool, ());
366ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsInlined, ());
367ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBBlock, GetInlinedName, ());
368ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBBlock,
369ae211eceSMichal Gorny                              GetInlinedCallSiteFile, ());
370ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteLine, ());
371ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteColumn, ());
372ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetParent, ());
373ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetContainingInlinedBlock, ());
374ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetSibling, ());
375ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetFirstChild, ());
376ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &));
377ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetNumRanges, ());
378ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress,
379ae211eceSMichal Gorny                        (uint32_t));
380ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress,
381ae211eceSMichal Gorny                        (uint32_t));
382ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
383ae211eceSMichal Gorny                        (lldb::SBAddress));
384ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
385ae211eceSMichal Gorny       lldb::SBValueList, SBBlock, GetVariables,
386ae211eceSMichal Gorny       (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType));
387ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBValueList, SBBlock, GetVariables,
388ae211eceSMichal Gorny                        (lldb::SBTarget &, bool, bool, bool));
389ae211eceSMichal Gorny }
390ae211eceSMichal Gorny 
391ae211eceSMichal Gorny }
392ae211eceSMichal Gorny }
393