| //===-- SWIG Interface for SBInstructionList --------------------*- C++ -*-===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include <stdio.h> | 
 |  | 
 | namespace lldb { | 
 |  | 
 | %feature("docstring", | 
 | "Represents a list of machine instructions.  SBFunction and SBSymbol have | 
 | GetInstructions() methods which return SBInstructionList instances. | 
 |  | 
 | SBInstructionList supports instruction (:py:class:`SBInstruction` instance) iteration. | 
 | For example (see also :py:class:`SBDebugger` for a more complete example), :: | 
 |  | 
 |     def disassemble_instructions (insts): | 
 |         for i in insts: | 
 |             print i | 
 |  | 
 | defines a function which takes an SBInstructionList instance and prints out | 
 | the machine instructions in assembly format." | 
 | ) SBInstructionList; | 
 | class SBInstructionList | 
 | { | 
 | public: | 
 |  | 
 |     SBInstructionList (); | 
 |  | 
 |     SBInstructionList (const SBInstructionList &rhs); | 
 |  | 
 |     ~SBInstructionList (); | 
 |  | 
 |     bool | 
 |     IsValid () const; | 
 |  | 
 |     explicit operator bool() const; | 
 |  | 
 |     size_t | 
 |     GetSize (); | 
 |  | 
 |     lldb::SBInstruction | 
 |     GetInstructionAtIndex (uint32_t idx); | 
 |  | 
 |     size_t GetInstructionsCount(const SBAddress &start, const SBAddress &end, | 
 |                                 bool canSetBreakpoint); | 
 |  | 
 |     void | 
 |     Clear (); | 
 |  | 
 |     void | 
 |     AppendInstruction (lldb::SBInstruction inst); | 
 |  | 
 |     void | 
 |     Print (lldb::SBFile out); | 
 |  | 
 |     void | 
 |     Print (lldb::FileSP BORROWED); | 
 |  | 
 |     bool | 
 |     GetDescription (lldb::SBStream &description); | 
 |  | 
 |     bool | 
 |     DumpEmulationForAllInstructions (const char *triple); | 
 |  | 
 |     STRING_EXTENSION(SBInstructionList) | 
 |  | 
 | #ifdef SWIGPYTHON | 
 |     %pythoncode %{ | 
 |         def __iter__(self): | 
 |             '''Iterate over all instructions in a lldb.SBInstructionList | 
 |             object.''' | 
 |             return lldb_iter(self, 'GetSize', 'GetInstructionAtIndex') | 
 |  | 
 |         def __len__(self): | 
 |             '''Access len of the instruction list.''' | 
 |             return int(self.GetSize()) | 
 |  | 
 |         def __getitem__(self, key): | 
 |             '''Access instructions by integer index for array access or by lldb.SBAddress to find an instruction that matches a section offset address object.''' | 
 |             if type(key) is int: | 
 |                 # Find an instruction by index | 
 |                 if key < len(self): | 
 |                     return self.GetInstructionAtIndex(key) | 
 |             elif type(key) is SBAddress: | 
 |                 # Find an instruction using a lldb.SBAddress object | 
 |                 lookup_file_addr = key.file_addr | 
 |                 closest_inst = None | 
 |                 for idx in range(self.GetSize()): | 
 |                     inst = self.GetInstructionAtIndex(idx) | 
 |                     inst_file_addr = inst.addr.file_addr | 
 |                     if inst_file_addr == lookup_file_addr: | 
 |                         return inst | 
 |                     elif inst_file_addr > lookup_file_addr: | 
 |                         return closest_inst | 
 |                     else: | 
 |                         closest_inst = inst | 
 |             return None | 
 |     %} | 
 | #endif | 
 |  | 
 | }; | 
 |  | 
 | } // namespace lldb |