15ffd83dbSDimitry Andric //===-- SBBlock.cpp -------------------------------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andric #include "lldb/API/SBBlock.h"
100b57cec5SDimitry Andric #include "SBReproducerPrivate.h"
110b57cec5SDimitry Andric #include "lldb/API/SBAddress.h"
120b57cec5SDimitry Andric #include "lldb/API/SBFileSpec.h"
130b57cec5SDimitry Andric #include "lldb/API/SBFrame.h"
140b57cec5SDimitry Andric #include "lldb/API/SBStream.h"
150b57cec5SDimitry Andric #include "lldb/API/SBValue.h"
160b57cec5SDimitry Andric #include "lldb/Core/AddressRange.h"
170b57cec5SDimitry Andric #include "lldb/Core/ValueObjectVariable.h"
180b57cec5SDimitry Andric #include "lldb/Symbol/Block.h"
190b57cec5SDimitry Andric #include "lldb/Symbol/Function.h"
200b57cec5SDimitry Andric #include "lldb/Symbol/SymbolContext.h"
210b57cec5SDimitry Andric #include "lldb/Symbol/VariableList.h"
220b57cec5SDimitry Andric #include "lldb/Target/StackFrame.h"
230b57cec5SDimitry Andric #include "lldb/Target/Target.h"
240b57cec5SDimitry Andric
250b57cec5SDimitry Andric using namespace lldb;
260b57cec5SDimitry Andric using namespace lldb_private;
270b57cec5SDimitry Andric
SBBlock()28*5f7ddb14SDimitry Andric SBBlock::SBBlock() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBBlock); }
290b57cec5SDimitry Andric
SBBlock(lldb_private::Block * lldb_object_ptr)300b57cec5SDimitry Andric SBBlock::SBBlock(lldb_private::Block *lldb_object_ptr)
310b57cec5SDimitry Andric : m_opaque_ptr(lldb_object_ptr) {}
320b57cec5SDimitry Andric
SBBlock(const SBBlock & rhs)330b57cec5SDimitry Andric SBBlock::SBBlock(const SBBlock &rhs) : m_opaque_ptr(rhs.m_opaque_ptr) {
340b57cec5SDimitry Andric LLDB_RECORD_CONSTRUCTOR(SBBlock, (const lldb::SBBlock &), rhs);
350b57cec5SDimitry Andric }
360b57cec5SDimitry Andric
operator =(const SBBlock & rhs)370b57cec5SDimitry Andric const SBBlock &SBBlock::operator=(const SBBlock &rhs) {
380b57cec5SDimitry Andric LLDB_RECORD_METHOD(const lldb::SBBlock &,
390b57cec5SDimitry Andric SBBlock, operator=,(const lldb::SBBlock &), rhs);
400b57cec5SDimitry Andric
410b57cec5SDimitry Andric m_opaque_ptr = rhs.m_opaque_ptr;
420b57cec5SDimitry Andric return LLDB_RECORD_RESULT(*this);
430b57cec5SDimitry Andric }
440b57cec5SDimitry Andric
~SBBlock()450b57cec5SDimitry Andric SBBlock::~SBBlock() { m_opaque_ptr = nullptr; }
460b57cec5SDimitry Andric
IsValid() const470b57cec5SDimitry Andric bool SBBlock::IsValid() const {
480b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, IsValid);
490b57cec5SDimitry Andric return this->operator bool();
500b57cec5SDimitry Andric }
operator bool() const510b57cec5SDimitry Andric SBBlock::operator bool() const {
520b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, operator bool);
530b57cec5SDimitry Andric
540b57cec5SDimitry Andric return m_opaque_ptr != nullptr;
550b57cec5SDimitry Andric }
560b57cec5SDimitry Andric
IsInlined() const570b57cec5SDimitry Andric bool SBBlock::IsInlined() const {
580b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBlock, IsInlined);
590b57cec5SDimitry Andric
600b57cec5SDimitry Andric if (m_opaque_ptr)
610b57cec5SDimitry Andric return m_opaque_ptr->GetInlinedFunctionInfo() != nullptr;
620b57cec5SDimitry Andric return false;
630b57cec5SDimitry Andric }
640b57cec5SDimitry Andric
GetInlinedName() const650b57cec5SDimitry Andric const char *SBBlock::GetInlinedName() const {
660b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBlock, GetInlinedName);
670b57cec5SDimitry Andric
680b57cec5SDimitry Andric if (m_opaque_ptr) {
690b57cec5SDimitry Andric const InlineFunctionInfo *inlined_info =
700b57cec5SDimitry Andric m_opaque_ptr->GetInlinedFunctionInfo();
710b57cec5SDimitry Andric if (inlined_info) {
725ffd83dbSDimitry Andric return inlined_info->GetName().AsCString(nullptr);
730b57cec5SDimitry Andric }
740b57cec5SDimitry Andric }
750b57cec5SDimitry Andric return nullptr;
760b57cec5SDimitry Andric }
770b57cec5SDimitry Andric
GetInlinedCallSiteFile() const780b57cec5SDimitry Andric SBFileSpec SBBlock::GetInlinedCallSiteFile() const {
790b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBBlock,
800b57cec5SDimitry Andric GetInlinedCallSiteFile);
810b57cec5SDimitry Andric
820b57cec5SDimitry Andric SBFileSpec sb_file;
830b57cec5SDimitry Andric if (m_opaque_ptr) {
840b57cec5SDimitry Andric const InlineFunctionInfo *inlined_info =
850b57cec5SDimitry Andric m_opaque_ptr->GetInlinedFunctionInfo();
860b57cec5SDimitry Andric if (inlined_info)
870b57cec5SDimitry Andric sb_file.SetFileSpec(inlined_info->GetCallSite().GetFile());
880b57cec5SDimitry Andric }
890b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_file);
900b57cec5SDimitry Andric }
910b57cec5SDimitry Andric
GetInlinedCallSiteLine() const920b57cec5SDimitry Andric uint32_t SBBlock::GetInlinedCallSiteLine() const {
930b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteLine);
940b57cec5SDimitry Andric
950b57cec5SDimitry Andric if (m_opaque_ptr) {
960b57cec5SDimitry Andric const InlineFunctionInfo *inlined_info =
970b57cec5SDimitry Andric m_opaque_ptr->GetInlinedFunctionInfo();
980b57cec5SDimitry Andric if (inlined_info)
990b57cec5SDimitry Andric return inlined_info->GetCallSite().GetLine();
1000b57cec5SDimitry Andric }
1010b57cec5SDimitry Andric return 0;
1020b57cec5SDimitry Andric }
1030b57cec5SDimitry Andric
GetInlinedCallSiteColumn() const1040b57cec5SDimitry Andric uint32_t SBBlock::GetInlinedCallSiteColumn() const {
1050b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBlock, GetInlinedCallSiteColumn);
1060b57cec5SDimitry Andric
1070b57cec5SDimitry Andric if (m_opaque_ptr) {
1080b57cec5SDimitry Andric const InlineFunctionInfo *inlined_info =
1090b57cec5SDimitry Andric m_opaque_ptr->GetInlinedFunctionInfo();
1100b57cec5SDimitry Andric if (inlined_info)
1110b57cec5SDimitry Andric return inlined_info->GetCallSite().GetColumn();
1120b57cec5SDimitry Andric }
1130b57cec5SDimitry Andric return 0;
1140b57cec5SDimitry Andric }
1150b57cec5SDimitry Andric
AppendVariables(bool can_create,bool get_parent_variables,lldb_private::VariableList * var_list)1160b57cec5SDimitry Andric void SBBlock::AppendVariables(bool can_create, bool get_parent_variables,
1170b57cec5SDimitry Andric lldb_private::VariableList *var_list) {
1180b57cec5SDimitry Andric if (IsValid()) {
1190b57cec5SDimitry Andric bool show_inline = true;
1200b57cec5SDimitry Andric m_opaque_ptr->AppendVariables(can_create, get_parent_variables, show_inline,
1210b57cec5SDimitry Andric [](Variable *) { return true; }, var_list);
1220b57cec5SDimitry Andric }
1230b57cec5SDimitry Andric }
1240b57cec5SDimitry Andric
GetParent()1250b57cec5SDimitry Andric SBBlock SBBlock::GetParent() {
1260b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetParent);
1270b57cec5SDimitry Andric
1280b57cec5SDimitry Andric SBBlock sb_block;
1290b57cec5SDimitry Andric if (m_opaque_ptr)
1300b57cec5SDimitry Andric sb_block.m_opaque_ptr = m_opaque_ptr->GetParent();
1310b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_block);
1320b57cec5SDimitry Andric }
1330b57cec5SDimitry Andric
GetContainingInlinedBlock()1340b57cec5SDimitry Andric lldb::SBBlock SBBlock::GetContainingInlinedBlock() {
1350b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetContainingInlinedBlock);
1360b57cec5SDimitry Andric
1370b57cec5SDimitry Andric SBBlock sb_block;
1380b57cec5SDimitry Andric if (m_opaque_ptr)
1390b57cec5SDimitry Andric sb_block.m_opaque_ptr = m_opaque_ptr->GetContainingInlinedBlock();
1400b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_block);
1410b57cec5SDimitry Andric }
1420b57cec5SDimitry Andric
GetSibling()1430b57cec5SDimitry Andric SBBlock SBBlock::GetSibling() {
1440b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetSibling);
1450b57cec5SDimitry Andric
1460b57cec5SDimitry Andric SBBlock sb_block;
1470b57cec5SDimitry Andric if (m_opaque_ptr)
1480b57cec5SDimitry Andric sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling();
1490b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_block);
1500b57cec5SDimitry Andric }
1510b57cec5SDimitry Andric
GetFirstChild()1520b57cec5SDimitry Andric SBBlock SBBlock::GetFirstChild() {
1530b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBlock, SBBlock, GetFirstChild);
1540b57cec5SDimitry Andric
1550b57cec5SDimitry Andric SBBlock sb_block;
1560b57cec5SDimitry Andric if (m_opaque_ptr)
1570b57cec5SDimitry Andric sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild();
1580b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_block);
1590b57cec5SDimitry Andric }
1600b57cec5SDimitry Andric
GetPtr()1610b57cec5SDimitry Andric lldb_private::Block *SBBlock::GetPtr() { return m_opaque_ptr; }
1620b57cec5SDimitry Andric
SetPtr(lldb_private::Block * block)1630b57cec5SDimitry Andric void SBBlock::SetPtr(lldb_private::Block *block) { m_opaque_ptr = block; }
1640b57cec5SDimitry Andric
GetDescription(SBStream & description)1650b57cec5SDimitry Andric bool SBBlock::GetDescription(SBStream &description) {
1660b57cec5SDimitry Andric LLDB_RECORD_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &),
1670b57cec5SDimitry Andric description);
1680b57cec5SDimitry Andric
1690b57cec5SDimitry Andric Stream &strm = description.ref();
1700b57cec5SDimitry Andric
1710b57cec5SDimitry Andric if (m_opaque_ptr) {
1720b57cec5SDimitry Andric lldb::user_id_t id = m_opaque_ptr->GetID();
1730b57cec5SDimitry Andric strm.Printf("Block: {id: %" PRIu64 "} ", id);
1740b57cec5SDimitry Andric if (IsInlined()) {
1750b57cec5SDimitry Andric strm.Printf(" (inlined, '%s') ", GetInlinedName());
1760b57cec5SDimitry Andric }
1770b57cec5SDimitry Andric lldb_private::SymbolContext sc;
1780b57cec5SDimitry Andric m_opaque_ptr->CalculateSymbolContext(&sc);
1790b57cec5SDimitry Andric if (sc.function) {
1800b57cec5SDimitry Andric m_opaque_ptr->DumpAddressRanges(
1810b57cec5SDimitry Andric &strm,
1820b57cec5SDimitry Andric sc.function->GetAddressRange().GetBaseAddress().GetFileAddress());
1830b57cec5SDimitry Andric }
1840b57cec5SDimitry Andric } else
1850b57cec5SDimitry Andric strm.PutCString("No value");
1860b57cec5SDimitry Andric
1870b57cec5SDimitry Andric return true;
1880b57cec5SDimitry Andric }
1890b57cec5SDimitry Andric
GetNumRanges()1900b57cec5SDimitry Andric uint32_t SBBlock::GetNumRanges() {
1910b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBBlock, GetNumRanges);
1920b57cec5SDimitry Andric
1930b57cec5SDimitry Andric if (m_opaque_ptr)
1940b57cec5SDimitry Andric return m_opaque_ptr->GetNumRanges();
1950b57cec5SDimitry Andric return 0;
1960b57cec5SDimitry Andric }
1970b57cec5SDimitry Andric
GetRangeStartAddress(uint32_t idx)1980b57cec5SDimitry Andric lldb::SBAddress SBBlock::GetRangeStartAddress(uint32_t idx) {
1990b57cec5SDimitry Andric LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress, (uint32_t),
2000b57cec5SDimitry Andric idx);
2010b57cec5SDimitry Andric
2020b57cec5SDimitry Andric lldb::SBAddress sb_addr;
2030b57cec5SDimitry Andric if (m_opaque_ptr) {
2040b57cec5SDimitry Andric AddressRange range;
2050b57cec5SDimitry Andric if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2060b57cec5SDimitry Andric sb_addr.ref() = range.GetBaseAddress();
2070b57cec5SDimitry Andric }
2080b57cec5SDimitry Andric }
2090b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_addr);
2100b57cec5SDimitry Andric }
2110b57cec5SDimitry Andric
GetRangeEndAddress(uint32_t idx)2120b57cec5SDimitry Andric lldb::SBAddress SBBlock::GetRangeEndAddress(uint32_t idx) {
2130b57cec5SDimitry Andric LLDB_RECORD_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress, (uint32_t),
2140b57cec5SDimitry Andric idx);
2150b57cec5SDimitry Andric
2160b57cec5SDimitry Andric lldb::SBAddress sb_addr;
2170b57cec5SDimitry Andric if (m_opaque_ptr) {
2180b57cec5SDimitry Andric AddressRange range;
2190b57cec5SDimitry Andric if (m_opaque_ptr->GetRangeAtIndex(idx, range)) {
2200b57cec5SDimitry Andric sb_addr.ref() = range.GetBaseAddress();
2210b57cec5SDimitry Andric sb_addr.ref().Slide(range.GetByteSize());
2220b57cec5SDimitry Andric }
2230b57cec5SDimitry Andric }
2240b57cec5SDimitry Andric return LLDB_RECORD_RESULT(sb_addr);
2250b57cec5SDimitry Andric }
2260b57cec5SDimitry Andric
GetRangeIndexForBlockAddress(lldb::SBAddress block_addr)2270b57cec5SDimitry Andric uint32_t SBBlock::GetRangeIndexForBlockAddress(lldb::SBAddress block_addr) {
2280b57cec5SDimitry Andric LLDB_RECORD_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
2290b57cec5SDimitry Andric (lldb::SBAddress), block_addr);
2300b57cec5SDimitry Andric
2310b57cec5SDimitry Andric if (m_opaque_ptr && block_addr.IsValid()) {
2320b57cec5SDimitry Andric return m_opaque_ptr->GetRangeIndexContainingAddress(block_addr.ref());
2330b57cec5SDimitry Andric }
2340b57cec5SDimitry Andric
2350b57cec5SDimitry Andric return UINT32_MAX;
2360b57cec5SDimitry Andric }
2370b57cec5SDimitry Andric
GetVariables(lldb::SBFrame & frame,bool arguments,bool locals,bool statics,lldb::DynamicValueType use_dynamic)2380b57cec5SDimitry Andric lldb::SBValueList SBBlock::GetVariables(lldb::SBFrame &frame, bool arguments,
2390b57cec5SDimitry Andric bool locals, bool statics,
2400b57cec5SDimitry Andric lldb::DynamicValueType use_dynamic) {
2410b57cec5SDimitry Andric LLDB_RECORD_METHOD(
2420b57cec5SDimitry Andric lldb::SBValueList, SBBlock, GetVariables,
2430b57cec5SDimitry Andric (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType), frame,
2440b57cec5SDimitry Andric arguments, locals, statics, use_dynamic);
2450b57cec5SDimitry Andric
2460b57cec5SDimitry Andric Block *block = GetPtr();
2470b57cec5SDimitry Andric SBValueList value_list;
2480b57cec5SDimitry Andric if (block) {
2490b57cec5SDimitry Andric StackFrameSP frame_sp(frame.GetFrameSP());
2500b57cec5SDimitry Andric VariableListSP variable_list_sp(block->GetBlockVariableList(true));
2510b57cec5SDimitry Andric
2520b57cec5SDimitry Andric if (variable_list_sp) {
2530b57cec5SDimitry Andric const size_t num_variables = variable_list_sp->GetSize();
2540b57cec5SDimitry Andric if (num_variables) {
2550b57cec5SDimitry Andric for (size_t i = 0; i < num_variables; ++i) {
2560b57cec5SDimitry Andric VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
2570b57cec5SDimitry Andric if (variable_sp) {
2580b57cec5SDimitry Andric bool add_variable = false;
2590b57cec5SDimitry Andric switch (variable_sp->GetScope()) {
2600b57cec5SDimitry Andric case eValueTypeVariableGlobal:
2610b57cec5SDimitry Andric case eValueTypeVariableStatic:
2620b57cec5SDimitry Andric case eValueTypeVariableThreadLocal:
2630b57cec5SDimitry Andric add_variable = statics;
2640b57cec5SDimitry Andric break;
2650b57cec5SDimitry Andric
2660b57cec5SDimitry Andric case eValueTypeVariableArgument:
2670b57cec5SDimitry Andric add_variable = arguments;
2680b57cec5SDimitry Andric break;
2690b57cec5SDimitry Andric
2700b57cec5SDimitry Andric case eValueTypeVariableLocal:
2710b57cec5SDimitry Andric add_variable = locals;
2720b57cec5SDimitry Andric break;
2730b57cec5SDimitry Andric
2740b57cec5SDimitry Andric default:
2750b57cec5SDimitry Andric break;
2760b57cec5SDimitry Andric }
2770b57cec5SDimitry Andric if (add_variable) {
2780b57cec5SDimitry Andric if (frame_sp) {
2790b57cec5SDimitry Andric lldb::ValueObjectSP valobj_sp(
2800b57cec5SDimitry Andric frame_sp->GetValueObjectForFrameVariable(variable_sp,
2810b57cec5SDimitry Andric eNoDynamicValues));
2820b57cec5SDimitry Andric SBValue value_sb;
2830b57cec5SDimitry Andric value_sb.SetSP(valobj_sp, use_dynamic);
2840b57cec5SDimitry Andric value_list.Append(value_sb);
2850b57cec5SDimitry Andric }
2860b57cec5SDimitry Andric }
2870b57cec5SDimitry Andric }
2880b57cec5SDimitry Andric }
2890b57cec5SDimitry Andric }
2900b57cec5SDimitry Andric }
2910b57cec5SDimitry Andric }
2920b57cec5SDimitry Andric return LLDB_RECORD_RESULT(value_list);
2930b57cec5SDimitry Andric }
2940b57cec5SDimitry Andric
GetVariables(lldb::SBTarget & target,bool arguments,bool locals,bool statics)2950b57cec5SDimitry Andric lldb::SBValueList SBBlock::GetVariables(lldb::SBTarget &target, bool arguments,
2960b57cec5SDimitry Andric bool locals, bool statics) {
2970b57cec5SDimitry Andric LLDB_RECORD_METHOD(lldb::SBValueList, SBBlock, GetVariables,
2980b57cec5SDimitry Andric (lldb::SBTarget &, bool, bool, bool), target, arguments,
2990b57cec5SDimitry Andric locals, statics);
3000b57cec5SDimitry Andric
3010b57cec5SDimitry Andric Block *block = GetPtr();
3020b57cec5SDimitry Andric
3030b57cec5SDimitry Andric SBValueList value_list;
3040b57cec5SDimitry Andric if (block) {
3050b57cec5SDimitry Andric TargetSP target_sp(target.GetSP());
3060b57cec5SDimitry Andric
3070b57cec5SDimitry Andric VariableListSP variable_list_sp(block->GetBlockVariableList(true));
3080b57cec5SDimitry Andric
3090b57cec5SDimitry Andric if (variable_list_sp) {
3100b57cec5SDimitry Andric const size_t num_variables = variable_list_sp->GetSize();
3110b57cec5SDimitry Andric if (num_variables) {
3120b57cec5SDimitry Andric for (size_t i = 0; i < num_variables; ++i) {
3130b57cec5SDimitry Andric VariableSP variable_sp(variable_list_sp->GetVariableAtIndex(i));
3140b57cec5SDimitry Andric if (variable_sp) {
3150b57cec5SDimitry Andric bool add_variable = false;
3160b57cec5SDimitry Andric switch (variable_sp->GetScope()) {
3170b57cec5SDimitry Andric case eValueTypeVariableGlobal:
3180b57cec5SDimitry Andric case eValueTypeVariableStatic:
3190b57cec5SDimitry Andric case eValueTypeVariableThreadLocal:
3200b57cec5SDimitry Andric add_variable = statics;
3210b57cec5SDimitry Andric break;
3220b57cec5SDimitry Andric
3230b57cec5SDimitry Andric case eValueTypeVariableArgument:
3240b57cec5SDimitry Andric add_variable = arguments;
3250b57cec5SDimitry Andric break;
3260b57cec5SDimitry Andric
3270b57cec5SDimitry Andric case eValueTypeVariableLocal:
3280b57cec5SDimitry Andric add_variable = locals;
3290b57cec5SDimitry Andric break;
3300b57cec5SDimitry Andric
3310b57cec5SDimitry Andric default:
3320b57cec5SDimitry Andric break;
3330b57cec5SDimitry Andric }
3340b57cec5SDimitry Andric if (add_variable) {
3350b57cec5SDimitry Andric if (target_sp)
3360b57cec5SDimitry Andric value_list.Append(
3370b57cec5SDimitry Andric ValueObjectVariable::Create(target_sp.get(), variable_sp));
3380b57cec5SDimitry Andric }
3390b57cec5SDimitry Andric }
3400b57cec5SDimitry Andric }
3410b57cec5SDimitry Andric }
3420b57cec5SDimitry Andric }
3430b57cec5SDimitry Andric }
3440b57cec5SDimitry Andric return LLDB_RECORD_RESULT(value_list);
3450b57cec5SDimitry Andric }
3460b57cec5SDimitry Andric
3470b57cec5SDimitry Andric namespace lldb_private {
3480b57cec5SDimitry Andric namespace repro {
3490b57cec5SDimitry Andric
3500b57cec5SDimitry Andric template <>
RegisterMethods(Registry & R)3510b57cec5SDimitry Andric void RegisterMethods<SBBlock>(Registry &R) {
3520b57cec5SDimitry Andric LLDB_REGISTER_CONSTRUCTOR(SBBlock, ());
3530b57cec5SDimitry Andric LLDB_REGISTER_CONSTRUCTOR(SBBlock, (const lldb::SBBlock &));
3540b57cec5SDimitry Andric LLDB_REGISTER_METHOD(const lldb::SBBlock &,
3550b57cec5SDimitry Andric SBBlock, operator=,(const lldb::SBBlock &));
3560b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsValid, ());
3570b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(bool, SBBlock, operator bool, ());
3580b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(bool, SBBlock, IsInlined, ());
3590b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(const char *, SBBlock, GetInlinedName, ());
3600b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBBlock,
3610b57cec5SDimitry Andric GetInlinedCallSiteFile, ());
3620b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteLine, ());
3630b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(uint32_t, SBBlock, GetInlinedCallSiteColumn, ());
3640b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetParent, ());
3650b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetContainingInlinedBlock, ());
3660b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetSibling, ());
3670b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBBlock, SBBlock, GetFirstChild, ());
3680b57cec5SDimitry Andric LLDB_REGISTER_METHOD(bool, SBBlock, GetDescription, (lldb::SBStream &));
3690b57cec5SDimitry Andric LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetNumRanges, ());
3700b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeStartAddress,
3710b57cec5SDimitry Andric (uint32_t));
3720b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBAddress, SBBlock, GetRangeEndAddress,
3730b57cec5SDimitry Andric (uint32_t));
3740b57cec5SDimitry Andric LLDB_REGISTER_METHOD(uint32_t, SBBlock, GetRangeIndexForBlockAddress,
3750b57cec5SDimitry Andric (lldb::SBAddress));
3760b57cec5SDimitry Andric LLDB_REGISTER_METHOD(
3770b57cec5SDimitry Andric lldb::SBValueList, SBBlock, GetVariables,
3780b57cec5SDimitry Andric (lldb::SBFrame &, bool, bool, bool, lldb::DynamicValueType));
3790b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBValueList, SBBlock, GetVariables,
3800b57cec5SDimitry Andric (lldb::SBTarget &, bool, bool, bool));
3810b57cec5SDimitry Andric }
3820b57cec5SDimitry Andric
3830b57cec5SDimitry Andric }
3840b57cec5SDimitry Andric }
385