124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBCompileUnit.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_SBCompileUnit_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBCompileUnit_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
145f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBFileSpec.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBCompileUnit
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBCompileUnit ();
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBCompileUnit (const lldb::SBCompileUnit &rhs);
25538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBCompileUnit ();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const lldb::SBCompileUnit &
29538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const lldb::SBCompileUnit &rhs);
30538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBFileSpec
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFileSpec () const;
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumLineEntries () const;
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBLineEntry
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetLineEntryAtIndex (uint32_t idx) const;
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindLineEntryIndex (uint32_t start_idx,
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        uint32_t line,
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        lldb::SBFileSpec *inline_file_spec) const;
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham    uint32_t
49d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham    FindLineEntryIndex (uint32_t start_idx,
50d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham                        uint32_t line,
51d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham                        lldb::SBFileSpec *inline_file_spec,
52d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham                        bool exact) const;
53d6d47976b71187907c1cdeea86fabf7d5534314fJim Ingham
54b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    SBFileSpec
55b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    GetSupportFileAtIndex (uint32_t idx) const;
56b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen
57b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    uint32_t
58b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    GetNumSupportFiles () const;
59b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen
60b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    uint32_t
61b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full);
62a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
63a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    //------------------------------------------------------------------
64a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// Get all types matching \a type_mask from debug info in this
65a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// compile unit.
66a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///
67a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// @param[in] type_mask
68a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    A bitfield that consists of one or more bits logically OR'ed
69a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    together from the lldb::TypeClass enumeration. This allows
70a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    you to request only structure types, or only class, struct
71a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    and union types. Passing in lldb::eTypeClassAny will return
72a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    all types found in the debug information for this compile
73a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    unit.
74a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///
75a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// @return
76a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///    A list of types in this compile unit that match \a type_mask
77a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    //------------------------------------------------------------------
78a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    lldb::SBTypeList
79a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    GetTypes (uint32_t type_mask = lldb::eTypeClassAny);
80b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator == (const lldb::SBCompileUnit &rhs) const;
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator != (const lldb::SBCompileUnit &rhs) const;
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
8898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
8998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
91c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    friend class SBAddress;
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBFrame;
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBSymbolContext;
94b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    friend class SBModule;
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr);
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::CompileUnit *
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator->() const;
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::CompileUnit &
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator*() const;
10361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice
10423b8abbe214c252028f6e09f79169529c846409dGreg Clayton    lldb_private::CompileUnit *
10523b8abbe214c252028f6e09f79169529c846409dGreg Clayton    get ();
10623b8abbe214c252028f6e09f79169529c846409dGreg Clayton
107dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton    void
108dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton    reset (lldb_private::CompileUnit *lldb_object_ptr);
109dd62d729cf960051615a74c1e67e2e41ec789fd7Greg Clayton
11063094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb_private::CompileUnit *m_opaque_ptr;
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBCompileUnit_h_
117