124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBlock.h -----------------------------------------------*- 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#ifndef LLDB_SBBlock_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBBlock_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
147dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBFrame.h"
157dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBTarget.h"
167dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton#include "lldb/API/SBValueList.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBBlock
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBlock ();
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBBlock (const lldb::SBBlock &rhs);
27538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBBlock ();
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const lldb::SBBlock &
31538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const lldb::SBBlock &rhs);
32538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    IsInlined () const;
3569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
3669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    bool
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    const char *
4069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetInlinedName () const;
4169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
4269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    lldb::SBFileSpec
4369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetInlinedCallSiteFile () const;
4469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
4569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    uint32_t
4669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetInlinedCallSiteLine () const;
4769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
4869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    uint32_t
4969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetInlinedCallSiteColumn () const;
5069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
5169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    lldb::SBBlock
5269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetParent ();
5369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
5469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    lldb::SBBlock
5569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetSibling ();
5669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
5769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    lldb::SBBlock
5869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    GetFirstChild ();
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    uint32_t
6123b8abbe214c252028f6e09f79169529c846409dGreg Clayton    GetNumRanges ();
6223b8abbe214c252028f6e09f79169529c846409dGreg Clayton
6323b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb::SBAddress
6423b8abbe214c252028f6e09f79169529c846409dGreg Clayton    GetRangeStartAddress (uint32_t idx);
6523b8abbe214c252028f6e09f79169529c846409dGreg Clayton
6623b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb::SBAddress
6723b8abbe214c252028f6e09f79169529c846409dGreg Clayton    GetRangeEndAddress (uint32_t idx);
6823b8abbe214c252028f6e09f79169529c846409dGreg Clayton
6923b8abbe214c252028f6e09f79169529c846409dGreg Clayton    uint32_t
7023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    GetRangeIndexForBlockAddress (lldb::SBAddress block_addr);
717dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
727dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    lldb::SBValueList
737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    GetVariables (lldb::SBFrame& frame,
747dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool arguments,
757dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool locals,
767dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool statics,
777dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  lldb::DynamicValueType use_dynamic);
7823b8abbe214c252028f6e09f79169529c846409dGreg Clayton
797dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    lldb::SBValueList
807dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    GetVariables (lldb::SBTarget& target,
817dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool arguments,
827dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool locals,
837dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                  bool statics);
8423b8abbe214c252028f6e09f79169529c846409dGreg Clayton    //------------------------------------------------------------------
8523b8abbe214c252028f6e09f79169529c846409dGreg Clayton    /// Get the inlined block that contains this block.
8623b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///
8723b8abbe214c252028f6e09f79169529c846409dGreg Clayton    /// @return
8823b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///     If this block is inlined, it will return this block, else
8923b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///     parent blocks will be searched to see if any contain this
9023b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///     block and are themselves inlined. An invalid SBBlock will
9123b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///     be returned if this block nor any parent blocks are inlined
9223b8abbe214c252028f6e09f79169529c846409dGreg Clayton    ///     function blocks.
9323b8abbe214c252028f6e09f79169529c846409dGreg Clayton    //------------------------------------------------------------------
9423b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb::SBBlock
9523b8abbe214c252028f6e09f79169529c846409dGreg Clayton    GetContainingInlinedBlock ();
9623b8abbe214c252028f6e09f79169529c846409dGreg Clayton
9798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
9898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
9998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
101c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    friend class SBAddress;
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBFrame;
1037dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    friend class SBFunction;
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBSymbolContext;
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10623b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb_private::Block *
1077dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    GetPtr ();
108a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton
109dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton    void
1107dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    SetPtr (lldb_private::Block *lldb_object_ptr);
111dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBBlock (lldb_private::Block *lldb_object_ptr);
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    void
11569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton    AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list);
11669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton
11763094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb_private::Block *m_opaque_ptr;
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBBlock_h_
124