xref: /openbsd-src/gnu/llvm/lldb/bindings/interface/SBCompileUnit.i (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- SWIG Interface for SBCompileUnit ------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick namespace lldb {
10061da546Spatrick 
11061da546Spatrick %feature("docstring",
12061da546Spatrick "Represents a compilation unit, or compiled source file.
13061da546Spatrick 
14be691f3bSpatrick SBCompileUnit supports line entry iteration. For example,::
15061da546Spatrick 
16061da546Spatrick     # Now get the SBSymbolContext from this frame.  We want everything. :-)
17061da546Spatrick     context = frame0.GetSymbolContext(lldb.eSymbolContextEverything)
18061da546Spatrick     ...
19061da546Spatrick 
20061da546Spatrick     compileUnit = context.GetCompileUnit()
21061da546Spatrick 
22061da546Spatrick     for lineEntry in compileUnit:
23061da546Spatrick         print('line entry: %s:%d' % (str(lineEntry.GetFileSpec()),
24061da546Spatrick                                     lineEntry.GetLine()))
25061da546Spatrick         print('start addr: %s' % str(lineEntry.GetStartAddress()))
26061da546Spatrick         print('end   addr: %s' % str(lineEntry.GetEndAddress()))
27061da546Spatrick 
28be691f3bSpatrick produces: ::
29061da546Spatrick 
30061da546Spatrick   line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:20
31061da546Spatrick   start addr: a.out[0x100000d98]
32061da546Spatrick   end   addr: a.out[0x100000da3]
33061da546Spatrick   line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:21
34061da546Spatrick   start addr: a.out[0x100000da3]
35061da546Spatrick   end   addr: a.out[0x100000da9]
36061da546Spatrick   line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:22
37061da546Spatrick   start addr: a.out[0x100000da9]
38061da546Spatrick   end   addr: a.out[0x100000db6]
39061da546Spatrick   line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:23
40061da546Spatrick   start addr: a.out[0x100000db6]
41061da546Spatrick   end   addr: a.out[0x100000dbc]
42061da546Spatrick   ...
43061da546Spatrick 
44be691f3bSpatrick See also :py:class:`SBSymbolContext` and :py:class:`SBLineEntry`"
45061da546Spatrick ) SBCompileUnit;
46061da546Spatrick class SBCompileUnit
47061da546Spatrick {
48061da546Spatrick public:
49061da546Spatrick 
50061da546Spatrick     SBCompileUnit ();
51061da546Spatrick 
52061da546Spatrick     SBCompileUnit (const lldb::SBCompileUnit &rhs);
53061da546Spatrick 
54061da546Spatrick     ~SBCompileUnit ();
55061da546Spatrick 
56061da546Spatrick     bool
57061da546Spatrick     IsValid () const;
58061da546Spatrick 
59061da546Spatrick     explicit operator bool() const;
60061da546Spatrick 
61061da546Spatrick     lldb::SBFileSpec
62061da546Spatrick     GetFileSpec () const;
63061da546Spatrick 
64061da546Spatrick     uint32_t
65061da546Spatrick     GetNumLineEntries () const;
66061da546Spatrick 
67061da546Spatrick     lldb::SBLineEntry
68061da546Spatrick     GetLineEntryAtIndex (uint32_t idx) const;
69061da546Spatrick 
70*f6aab3d8Srobert     %feature("docstring", "
71*f6aab3d8Srobert      Get the index for a provided line entry in this compile unit.
72*f6aab3d8Srobert 
73*f6aab3d8Srobert      @param[in] line_entry
74*f6aab3d8Srobert         The SBLineEntry object for which we are looking for the index.
75*f6aab3d8Srobert 
76*f6aab3d8Srobert      @param[in] exact
77*f6aab3d8Srobert         An optional boolean defaulting to false that ensures that the provided
78*f6aab3d8Srobert         line entry has a perfect match in the compile unit.
79*f6aab3d8Srobert 
80*f6aab3d8Srobert      @return
81*f6aab3d8Srobert         The index of the user-provided line entry. UINT32_MAX if the line entry
82*f6aab3d8Srobert         was not found in the compile unit.") FindLineEntryIndex;
83*f6aab3d8Srobert     uint32_t
84*f6aab3d8Srobert     FindLineEntryIndex (lldb::SBLineEntry &line_entry, bool exact = false) const;
85*f6aab3d8Srobert 
86061da546Spatrick     uint32_t
87061da546Spatrick     FindLineEntryIndex (uint32_t start_idx,
88061da546Spatrick                         uint32_t line,
89061da546Spatrick                         lldb::SBFileSpec *inline_file_spec) const;
90061da546Spatrick 
91061da546Spatrick     uint32_t
92061da546Spatrick     FindLineEntryIndex (uint32_t start_idx,
93061da546Spatrick                         uint32_t line,
94061da546Spatrick                         lldb::SBFileSpec *inline_file_spec,
95061da546Spatrick 			bool exact) const;
96061da546Spatrick 
97061da546Spatrick     SBFileSpec
98061da546Spatrick     GetSupportFileAtIndex (uint32_t idx) const;
99061da546Spatrick 
100061da546Spatrick     uint32_t
101061da546Spatrick     GetNumSupportFiles () const;
102061da546Spatrick 
103061da546Spatrick     uint32_t
104061da546Spatrick     FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full);
105061da546Spatrick 
106061da546Spatrick     %feature("docstring", "
107061da546Spatrick      Get all types matching type_mask from debug info in this
108061da546Spatrick      compile unit.
109061da546Spatrick 
110061da546Spatrick      @param[in] type_mask
111061da546Spatrick         A bitfield that consists of one or more bits logically OR'ed
112061da546Spatrick         together from the lldb::TypeClass enumeration. This allows
113061da546Spatrick         you to request only structure types, or only class, struct
114061da546Spatrick         and union types. Passing in lldb::eTypeClassAny will return
115061da546Spatrick         all types found in the debug information for this compile
116061da546Spatrick         unit.
117061da546Spatrick 
118061da546Spatrick      @return
119061da546Spatrick         A list of types in this compile unit that match type_mask") GetTypes;
120061da546Spatrick     lldb::SBTypeList
121061da546Spatrick     GetTypes (uint32_t type_mask = lldb::eTypeClassAny);
122061da546Spatrick 
123061da546Spatrick      lldb::LanguageType
124061da546Spatrick      GetLanguage ();
125061da546Spatrick 
126061da546Spatrick     bool
127061da546Spatrick     GetDescription (lldb::SBStream &description);
128061da546Spatrick 
129061da546Spatrick     bool
130061da546Spatrick     operator == (const lldb::SBCompileUnit &rhs) const;
131061da546Spatrick 
132061da546Spatrick     bool
133061da546Spatrick     operator != (const lldb::SBCompileUnit &rhs) const;
134061da546Spatrick 
135061da546Spatrick     STRING_EXTENSION(SBCompileUnit)
136061da546Spatrick 
137061da546Spatrick #ifdef SWIGPYTHON
138061da546Spatrick     %pythoncode %{
139061da546Spatrick         def __iter__(self):
140061da546Spatrick             '''Iterate over all line entries in a lldb.SBCompileUnit object.'''
141061da546Spatrick             return lldb_iter(self, 'GetNumLineEntries', 'GetLineEntryAtIndex')
142061da546Spatrick 
143061da546Spatrick         def __len__(self):
144061da546Spatrick             '''Return the number of line entries in a lldb.SBCompileUnit
145061da546Spatrick             object.'''
146061da546Spatrick             return self.GetNumLineEntries()
147061da546Spatrick 
148061da546Spatrick         file = property(GetFileSpec, None, doc='''A read only property that returns the same result an lldb object that represents the source file (lldb.SBFileSpec) for the compile unit.''')
149061da546Spatrick         num_line_entries = property(GetNumLineEntries, None, doc='''A read only property that returns the number of line entries in a compile unit as an integer.''')
150061da546Spatrick     %}
151061da546Spatrick #endif
152061da546Spatrick };
153061da546Spatrick 
154061da546Spatrick } // namespace lldb
155