1//===-- SWIG Interface for SBSymbolContextList ------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9namespace lldb {
10
11%feature("docstring",
12"Represents a list of symbol context object. See also SBSymbolContext.
13
14For example (from test/python_api/target/TestTargetAPI.py),
15
16    def find_functions(self, exe_name):
17        '''Exercise SBTaget.FindFunctions() API.'''
18        exe = os.path.join(os.getcwd(), exe_name)
19
20        # Create a target by the debugger.
21        target = self.dbg.CreateTarget(exe)
22        self.assertTrue(target, VALID_TARGET)
23
24        list = lldb.SBSymbolContextList()
25        num = target.FindFunctions('c', lldb.eFunctionNameTypeAuto, False, list)
26        self.assertTrue(num == 1 and list.GetSize() == 1)
27
28        for sc in list:
29            self.assertTrue(sc.GetModule().GetFileSpec().GetFilename() == exe_name)
30            self.assertTrue(sc.GetSymbol().GetName() == 'c')") SBSymbolContextList;
31class SBSymbolContextList
32{
33public:
34    SBSymbolContextList ();
35
36    SBSymbolContextList (const lldb::SBSymbolContextList& rhs);
37
38    ~SBSymbolContextList ();
39
40    bool
41    IsValid () const;
42
43    explicit operator bool() const;
44
45    uint32_t
46    GetSize() const;
47
48    SBSymbolContext
49    GetContextAtIndex (uint32_t idx);
50
51    void
52    Append (lldb::SBSymbolContext &sc);
53
54    void
55    Append (lldb::SBSymbolContextList &sc_list);
56
57    bool
58    GetDescription (lldb::SBStream &description);
59
60    void
61    Clear();
62
63    STRING_EXTENSION(SBSymbolContextList)
64
65#ifdef SWIGPYTHON
66    %pythoncode %{
67        def __iter__(self):
68            '''Iterate over all symbol contexts in a lldb.SBSymbolContextList
69            object.'''
70            return lldb_iter(self, 'GetSize', 'GetContextAtIndex')
71
72        def __len__(self):
73            return int(self.GetSize())
74
75        def __getitem__(self, key):
76            count = len(self)
77            if type(key) is int:
78                if key < count:
79                    return self.GetContextAtIndex(key)
80                else:
81                    raise IndexError
82            raise TypeError
83
84        def get_module_array(self):
85            a = []
86            for i in range(len(self)):
87                obj = self.GetContextAtIndex(i).module
88                if obj:
89                    a.append(obj)
90            return a
91
92        def get_compile_unit_array(self):
93            a = []
94            for i in range(len(self)):
95                obj = self.GetContextAtIndex(i).compile_unit
96                if obj:
97                    a.append(obj)
98            return a
99        def get_function_array(self):
100            a = []
101            for i in range(len(self)):
102                obj = self.GetContextAtIndex(i).function
103                if obj:
104                    a.append(obj)
105            return a
106        def get_block_array(self):
107            a = []
108            for i in range(len(self)):
109                obj = self.GetContextAtIndex(i).block
110                if obj:
111                    a.append(obj)
112            return a
113        def get_symbol_array(self):
114            a = []
115            for i in range(len(self)):
116                obj = self.GetContextAtIndex(i).symbol
117                if obj:
118                    a.append(obj)
119            return a
120        def get_line_entry_array(self):
121            a = []
122            for i in range(len(self)):
123                obj = self.GetContextAtIndex(i).line_entry
124                if obj:
125                    a.append(obj)
126            return a
127
128        modules = property(get_module_array, None, doc='''Returns a list() of lldb.SBModule objects, one for each module in each SBSymbolContext object in this list.''')
129        compile_units = property(get_compile_unit_array, None, doc='''Returns a list() of lldb.SBCompileUnit objects, one for each compile unit in each SBSymbolContext object in this list.''')
130        functions = property(get_function_array, None, doc='''Returns a list() of lldb.SBFunction objects, one for each function in each SBSymbolContext object in this list.''')
131        blocks = property(get_block_array, None, doc='''Returns a list() of lldb.SBBlock objects, one for each block in each SBSymbolContext object in this list.''')
132        line_entries = property(get_line_entry_array, None, doc='''Returns a list() of lldb.SBLineEntry objects, one for each line entry in each SBSymbolContext object in this list.''')
133        symbols = property(get_symbol_array, None, doc='''Returns a list() of lldb.SBSymbol objects, one for each symbol in each SBSymbolContext object in this list.''')
134    %}
135#endif
136
137};
138
139} // namespace lldb
140