1 //===-- SBInstructionList.cpp -----------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/API/SBInstructionList.h" 11 #include "lldb/API/SBInstruction.h" 12 #include "lldb/API/SBStream.h" 13 #include "lldb/Core/Disassembler.h" 14 #include "lldb/Core/Stream.h" 15 16 using namespace lldb; 17 using namespace lldb_private; 18 19 20 SBInstructionList::SBInstructionList () : 21 m_opaque_sp() 22 { 23 } 24 25 SBInstructionList::SBInstructionList(const SBInstructionList &rhs) : 26 m_opaque_sp (rhs.m_opaque_sp) 27 { 28 } 29 30 const SBInstructionList & 31 SBInstructionList::operator = (const SBInstructionList &rhs) 32 { 33 if (this != &rhs) 34 m_opaque_sp = rhs.m_opaque_sp; 35 return *this; 36 } 37 38 39 SBInstructionList::~SBInstructionList () 40 { 41 } 42 43 size_t 44 SBInstructionList::GetSize () 45 { 46 if (m_opaque_sp) 47 return m_opaque_sp->GetInstructionList().GetSize(); 48 return 0; 49 } 50 51 SBInstruction 52 SBInstructionList::GetInstructionAtIndex (uint32_t idx) 53 { 54 SBInstruction inst; 55 if (m_opaque_sp && idx < m_opaque_sp->GetInstructionList().GetSize()) 56 inst.SetOpaque (m_opaque_sp->GetInstructionList().GetInstructionAtIndex (idx)); 57 return inst; 58 } 59 60 void 61 SBInstructionList::Clear () 62 { 63 m_opaque_sp.reset(); 64 } 65 66 void 67 SBInstructionList::AppendInstruction (SBInstruction insn) 68 { 69 } 70 71 void 72 SBInstructionList::SetDisassembler (const lldb::DisassemblerSP &opaque_sp) 73 { 74 m_opaque_sp = opaque_sp; 75 } 76 77 void 78 SBInstructionList::Print (FILE *out) 79 { 80 if (out == NULL) 81 return; 82 } 83 84 85 bool 86 SBInstructionList::GetDescription (lldb::SBStream &description) 87 { 88 if (m_opaque_sp) 89 { 90 size_t num_instructions = GetSize (); 91 if (num_instructions) 92 { 93 // Call the ref() to make sure a stream is created if one deesn't 94 // exist already inside description... 95 Stream &sref = description.ref(); 96 for (size_t i=0; i<num_instructions; ++i) 97 { 98 Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get(); 99 if (inst == NULL) 100 break; 101 inst->Dump (&sref, true, NULL, 0, NULL, false); 102 sref.EOL(); 103 } 104 return true; 105 } 106 } 107 return false; 108 } 109 110 111