SBBlock.cpp revision e7a566e3301b272d18a5f752f99c8cb8b63b28a4
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"
1169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/API/SBFileSpec.h"
1298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Block.h"
1469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/Symbol/Function.h"
1598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/Symbol/SymbolContext.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
1869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonusing namespace lldb_private;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock () :
2263094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr (NULL)
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock (lldb_private::Block *lldb_object_ptr) :
2763094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr (lldb_object_ptr)
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::~SBBlock ()
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3363094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_ptr = NULL;
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::IsValid () const
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3963094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ptr != NULL;
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonbool
4369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::IsInlined () const
4469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
4569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
4669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        return m_opaque_ptr->GetInlinedFunctionInfo () != NULL;
4769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return false;
4869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
4969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
5069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonconst char *
5169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedName () const
5269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
5369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
5469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
5569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
5669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
5769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetName().AsCString (NULL);
5869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
5969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return NULL;
6069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
6169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
6269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBFileSpec
6369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteFile () const
6469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
6569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBFileSpec sb_file;
6669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
6769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
6869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
6969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
7069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            sb_file.SetFileSpec (inlined_info->GetCallSite().GetFile());
7169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
7269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_file;
7369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
7469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
7569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t
7669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteLine () const
7769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
7869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
7969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
8069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
8169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
8269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetCallSite().GetLine();
8369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
8469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return 0;
8569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
8669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
8769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t
8869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteColumn () const
8969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
9069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
9169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    {
9269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo ();
9369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        if (inlined_info)
9469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton            return inlined_info->GetCallSite().GetColumn();
9569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    }
9669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return 0;
9769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
9869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list)
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
10433ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        bool show_inline = true;
10533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton        m_opaque_ptr->AppendVariables (can_create, get_parent_variables, show_inline, var_list);
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
11069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetParent ()
11169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
11269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
11369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
11469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetParent();
11569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
11669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
11769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
11869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
11969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetSibling ()
12069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
12169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
12269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
12369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling();
12469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
12569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
12669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
12769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock
12869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetFirstChild ()
12969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{
13069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    SBBlock sb_block;
13169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    if (m_opaque_ptr)
13269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton        sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild();
13369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    return sb_block;
13469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton}
13569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
13898f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBBlock::GetDescription (SBStream &description)
13998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{
14098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    if (m_opaque_ptr)
141e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice    {
14298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        lldb::user_id_t id = m_opaque_ptr->GetID();
14398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        description.Printf ("Block: {id: %d} ", id);
14498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        if (IsInlined())
145e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        {
14698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice            description.Printf (" (inlined, '%s') ", GetInlinedName());
147e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        }
14898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        lldb_private::SymbolContext sc;
14998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        m_opaque_ptr->CalculateSymbolContext (&sc);
15098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        if (sc.function)
151e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        {
15298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice            m_opaque_ptr->DumpAddressRanges (description.get(),
15398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice                                             sc.function->GetAddressRange().GetBaseAddress().GetFileAddress());
154e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice        }
155e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice    }
15698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    else
15798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        description.Printf ("No value");
15898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
15998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    return true;
16098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16298f930f429160f9777f626c3ac6aa609f4e965d2Caroline TicePyObject *
16398f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBBlock::__repr__ ()
16498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{
16598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    SBStream description;
16698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    description.ref();
16798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (description);
16898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    return PyString_FromString (description.GetData());
16998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
170