SBBlock.cpp revision 5f35a4be95aed0e5b2cb36f7d785bcbfc67284ae
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBlock.cpp ---------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBBlock.h"
1123b8abbe214c252028f6e09f79169529c846409dGreg Clayton#include "lldb/API/SBAddress.h"
1269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/API/SBFileSpec.h"
137dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBFrame.h"
1498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
157dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBValue.h"
1623b8abbe214c252028f6e09f79169529c846409dGreg Clayton#include "lldb/Core/AddressRange.h"
177dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/Core/Log.h"
187dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/Core/ValueObjectVariable.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Block.h"
2069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/Symbol/Function.h"
2198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/Symbol/SymbolContext.h"
227dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/Symbol/VariableList.h"
237dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/Target/StackFrame.h"
247dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/Target/Target.h"
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonusing namespace lldb_private;
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock () :
3163094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr (NULL)
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock (lldb_private::Block *lldb_object_ptr) :
3663094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr (lldb_object_ptr)
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
40538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBBlock::SBBlock(const SBBlock &rhs) :
41538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    m_opaque_ptr (rhs.m_opaque_ptr)
42538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{
43538eb82a89a68dbc57251915080bd5152b333978Greg Clayton}
44538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
45538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBBlock &
46538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBBlock::operator = (const SBBlock &rhs)
47538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{
48538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    m_opaque_ptr = rhs.m_opaque_ptr;
49538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    return *this;
50538eb82a89a68dbc57251915080bd5152b333978Greg Clayton}
51538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::~SBBlock ()
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5463094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr = NULL;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::IsValid () const
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6063094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ptr != NULL;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonbool
6469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::IsInlined () const
6569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
6669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
6769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        return m_opaque_ptr->GetInlinedFunctionInfo () != NULL;
6869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return false;
6969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
7069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
7169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonconst char *
7269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedName () const
7369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
7469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
7569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
7669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
7769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
7869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetName().AsCString (NULL);
7969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
8069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return NULL;
8169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
8269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
8369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBFileSpec
8469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteFile () const
8569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
8669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBFileSpec sb_file;
8769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
8869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
8969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
9069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
9169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            sb_file.SetFileSpec (inlined_info->GetCallSite().GetFile());
9269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
9369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_file;
9469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
9569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
9669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t
9769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteLine () const
9869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
9969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
10069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
10169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
10269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
10369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetCallSite().GetLine();
10469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
10569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return 0;
10669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
10769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
10869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t
10969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteColumn () const
11069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
11169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
11269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
11369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
11469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
11569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetCallSite().GetColumn();
11669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
11769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return 0;
11869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
11969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list)
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
12533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        bool show_inline = true;
12633ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        m_opaque_ptr->AppendVariables (can_create, get_parent_variables, show_inline, var_list);
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
13169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetParent ()
13269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
13369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
13469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
13569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetParent();
13669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
13769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
13869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
13923b8abbe214c252028f6e09f79169529c846409dGreg Claytonlldb::SBBlock
14023b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBBlock::GetContainingInlinedBlock  ()
14123b8abbe214c252028f6e09f79169529c846409dGreg Clayton{
14223b8abbe214c252028f6e09f79169529c846409dGreg Clayton    SBBlock sb_block;
14323b8abbe214c252028f6e09f79169529c846409dGreg Clayton    if (m_opaque_ptr)
14423b8abbe214c252028f6e09f79169529c846409dGreg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetContainingInlinedBlock ();
14523b8abbe214c252028f6e09f79169529c846409dGreg Clayton    return sb_block;
14623b8abbe214c252028f6e09f79169529c846409dGreg Clayton}
14723b8abbe214c252028f6e09f79169529c846409dGreg Clayton
14869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
14969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetSibling ()
15069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
15169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
15269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
15369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling();
15469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
15569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
15669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
15769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
15869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetFirstChild ()
15969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
16069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
16169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
16269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild();
16369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
16469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
16569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
16623b8abbe214c252028f6e09f79169529c846409dGreg Claytonlldb_private::Block *
1677dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBBlock::GetPtr ()
168a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton{
169a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return m_opaque_ptr;
170a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton}
171a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
172dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Claytonvoid
1737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBBlock::SetPtr (lldb_private::Block *block)
174dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton{
175dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton    m_opaque_ptr = block;
176dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton}
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
17998f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBBlock::GetDescription (SBStream &description)
18098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{
18196154be69fa240a662419183ed08e1cfc5418164Greg Clayton    Stream &strm = description.ref();
18296154be69fa240a662419183ed08e1cfc5418164Greg Clayton
18398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    if (m_opaque_ptr)
184e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice    {
18598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        lldb::user_id_t id = m_opaque_ptr->GetID();
1865f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        strm.Printf ("Block: {id: %" PRIu64 "} ", id);
18798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        if (IsInlined())
188e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        {
18996154be69fa240a662419183ed08e1cfc5418164Greg Clayton            strm.Printf (" (inlined, '%s') ", GetInlinedName());
190e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        }
19198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        lldb_private::SymbolContext sc;
19298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        m_opaque_ptr->CalculateSymbolContext (&sc);
19398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        if (sc.function)
194e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        {
19596154be69fa240a662419183ed08e1cfc5418164Greg Clayton            m_opaque_ptr->DumpAddressRanges (&strm,
19698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice                                             sc.function->GetAddressRange().GetBaseAddress().GetFileAddress());
197e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        }
198e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice    }
19998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    else
20096154be69fa240a662419183ed08e1cfc5418164Greg Clayton        strm.PutCString ("No value");
20198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
20298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    return true;
20398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
20423b8abbe214c252028f6e09f79169529c846409dGreg Clayton
20523b8abbe214c252028f6e09f79169529c846409dGreg Claytonuint32_t
20623b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBBlock::GetNumRanges ()
20723b8abbe214c252028f6e09f79169529c846409dGreg Clayton{
20823b8abbe214c252028f6e09f79169529c846409dGreg Clayton    if (m_opaque_ptr)
20923b8abbe214c252028f6e09f79169529c846409dGreg Clayton        return m_opaque_ptr->GetNumRanges();
21023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    return 0;
21123b8abbe214c252028f6e09f79169529c846409dGreg Clayton}
21223b8abbe214c252028f6e09f79169529c846409dGreg Clayton
21323b8abbe214c252028f6e09f79169529c846409dGreg Claytonlldb::SBAddress
21423b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBBlock::GetRangeStartAddress (uint32_t idx)
21523b8abbe214c252028f6e09f79169529c846409dGreg Clayton{
21623b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb::SBAddress sb_addr;
21723b8abbe214c252028f6e09f79169529c846409dGreg Clayton    if (m_opaque_ptr)
21823b8abbe214c252028f6e09f79169529c846409dGreg Clayton    {
21923b8abbe214c252028f6e09f79169529c846409dGreg Clayton        AddressRange range;
22023b8abbe214c252028f6e09f79169529c846409dGreg Clayton        if (m_opaque_ptr->GetRangeAtIndex(idx, range))
22123b8abbe214c252028f6e09f79169529c846409dGreg Clayton        {
22223b8abbe214c252028f6e09f79169529c846409dGreg Clayton            sb_addr.ref() = range.GetBaseAddress();
22323b8abbe214c252028f6e09f79169529c846409dGreg Clayton        }
22423b8abbe214c252028f6e09f79169529c846409dGreg Clayton    }
22523b8abbe214c252028f6e09f79169529c846409dGreg Clayton    return sb_addr;
22623b8abbe214c252028f6e09f79169529c846409dGreg Clayton}
22723b8abbe214c252028f6e09f79169529c846409dGreg Clayton
22823b8abbe214c252028f6e09f79169529c846409dGreg Claytonlldb::SBAddress
22923b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBBlock::GetRangeEndAddress (uint32_t idx)
23023b8abbe214c252028f6e09f79169529c846409dGreg Clayton{
23123b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb::SBAddress sb_addr;
23223b8abbe214c252028f6e09f79169529c846409dGreg Clayton    if (m_opaque_ptr)
23323b8abbe214c252028f6e09f79169529c846409dGreg Clayton    {
23423b8abbe214c252028f6e09f79169529c846409dGreg Clayton        AddressRange range;
23523b8abbe214c252028f6e09f79169529c846409dGreg Clayton        if (m_opaque_ptr->GetRangeAtIndex(idx, range))
23623b8abbe214c252028f6e09f79169529c846409dGreg Clayton        {
23723b8abbe214c252028f6e09f79169529c846409dGreg Clayton            sb_addr.ref() = range.GetBaseAddress();
23823b8abbe214c252028f6e09f79169529c846409dGreg Clayton            sb_addr.ref().Slide(range.GetByteSize());
23923b8abbe214c252028f6e09f79169529c846409dGreg Clayton        }
24023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    }
24123b8abbe214c252028f6e09f79169529c846409dGreg Clayton    return sb_addr;
24223b8abbe214c252028f6e09f79169529c846409dGreg Clayton}
24323b8abbe214c252028f6e09f79169529c846409dGreg Clayton
24423b8abbe214c252028f6e09f79169529c846409dGreg Claytonuint32_t
24523b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBBlock::GetRangeIndexForBlockAddress (lldb::SBAddress block_addr)
24623b8abbe214c252028f6e09f79169529c846409dGreg Clayton{
24723b8abbe214c252028f6e09f79169529c846409dGreg Clayton    if (m_opaque_ptr && block_addr.IsValid())
24823b8abbe214c252028f6e09f79169529c846409dGreg Clayton    {
249bc36a861b8e0b2f2dde34f27c9fa9629a357d598Greg Clayton        return m_opaque_ptr->GetRangeIndexContainingAddress (block_addr.ref());
25023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    }
25123b8abbe214c252028f6e09f79169529c846409dGreg Clayton
25223b8abbe214c252028f6e09f79169529c846409dGreg Clayton    return UINT32_MAX;
25323b8abbe214c252028f6e09f79169529c846409dGreg Clayton}
25423b8abbe214c252028f6e09f79169529c846409dGreg Clayton
2557dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
2567dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonlldb::SBValueList
2577dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBBlock::GetVariables (lldb::SBFrame& frame,
2587dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool arguments,
2597dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool locals,
2607dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool statics,
2617dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       lldb::DynamicValueType use_dynamic)
2627dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{
2637dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    Block *block = GetPtr();
2647dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    SBValueList value_list;
2657dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    if (block)
2667dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    {
2677dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        StackFrameSP frame_sp(frame.GetFrameSP());
2687dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        VariableListSP variable_list_sp (block->GetBlockVariableList (true));
2697dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
2707dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        if (variable_list_sp)
2717dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        {
2727dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            const size_t num_variables = variable_list_sp->GetSize();
2737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            if (num_variables)
2747dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            {
2757dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                for (size_t i = 0; i < num_variables; ++i)
2767dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                {
2777dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    VariableSP variable_sp (variable_list_sp->GetVariableAtIndex(i));
2787dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    if (variable_sp)
2797dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    {
2807dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        bool add_variable = false;
2817dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        switch (variable_sp->GetScope())
2827dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        {
2837dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableGlobal:
2847dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableStatic:
2857dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = statics;
2867dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
2877dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
2887dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableArgument:
2897dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = arguments;
2907dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
2917dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
2927dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableLocal:
2937dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = locals;
2947dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
2957dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
2967dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            default:
2977dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
2987dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        }
2997dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        if (add_variable)
3007dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        {
3017dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            if (frame_sp)
3023d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                            {
3033d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                                lldb::ValueObjectSP valobj_sp(frame_sp->GetValueObjectForFrameVariable (variable_sp,eNoDynamicValues));
3043d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                                SBValue value_sb;
3053d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                                value_sb.SetSP(valobj_sp, use_dynamic);
3063d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                                value_list.Append (value_sb);
3073d656c729a1ed0abad4e5a2d76f6e8a6904f66aaEnrico Granata                            }
3087dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        }
3097dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    }
3107dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                }
3117dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            }
3127dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        }
3137dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    }
3147dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    return value_list;
3157dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton}
3167dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3177dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonlldb::SBValueList
3187dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonSBBlock::GetVariables (lldb::SBTarget& target,
3197dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool arguments,
3207dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool locals,
3217dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                       bool statics)
3227dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{
3237dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    Block *block = GetPtr();
3247dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3257dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    SBValueList value_list;
3267dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    if (block)
3277dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    {
3287dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        TargetSP target_sp(target.GetSP());
3297dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3307dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        VariableListSP variable_list_sp (block->GetBlockVariableList (true));
3317dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3327dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        if (variable_list_sp)
3337dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        {
3347dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            const size_t num_variables = variable_list_sp->GetSize();
3357dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            if (num_variables)
3367dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            {
3377dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                for (size_t i = 0; i < num_variables; ++i)
3387dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                {
3397dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    VariableSP variable_sp (variable_list_sp->GetVariableAtIndex(i));
3407dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    if (variable_sp)
3417dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    {
3427dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        bool add_variable = false;
3437dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        switch (variable_sp->GetScope())
3447dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        {
3457dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableGlobal:
3467dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableStatic:
3477dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = statics;
3487dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
3497dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3507dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableArgument:
3517dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = arguments;
3527dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
3537dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3547dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            case eValueTypeVariableLocal:
3557dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                add_variable = locals;
3567dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
3577dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
3587dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            default:
3597dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                break;
3607dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        }
3617dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        if (add_variable)
3627dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        {
3637dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                            if (target_sp)
3647dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                                value_list.Append (ValueObjectVariable::Create (target_sp.get(), variable_sp));
3657dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                        }
3667dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                    }
3677dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                }
3687dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton            }
3697dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton        }
3707dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    }
3717dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    return value_list;
3727dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton}
3737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
374