SBInstructionList.cpp revision 889fbd0581c24523642e0a04d659cc8f3dcdb4ed
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 16using namespace lldb; 17using namespace lldb_private; 18 19 20SBInstructionList::SBInstructionList () : 21 m_opaque_sp() 22{ 23} 24 25SBInstructionList::SBInstructionList(const SBInstructionList &rhs) : 26 m_opaque_sp (rhs.m_opaque_sp) 27{ 28} 29 30const SBInstructionList & 31SBInstructionList::operator = (const SBInstructionList &rhs) 32{ 33 if (this != &rhs) 34 m_opaque_sp = rhs.m_opaque_sp; 35 return *this; 36} 37 38 39SBInstructionList::~SBInstructionList () 40{ 41} 42 43size_t 44SBInstructionList::GetSize () 45{ 46 if (m_opaque_sp) 47 return m_opaque_sp->GetInstructionList().GetSize(); 48 return 0; 49} 50 51SBInstruction 52SBInstructionList::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 60void 61SBInstructionList::Clear () 62{ 63 m_opaque_sp.reset(); 64} 65 66void 67SBInstructionList::AppendInstruction (SBInstruction insn) 68{ 69} 70 71void 72SBInstructionList::SetDisassembler (const lldb::DisassemblerSP &opaque_sp) 73{ 74 m_opaque_sp = opaque_sp; 75} 76 77void 78SBInstructionList::Print (FILE *out) 79{ 80 if (out == NULL) 81 return; 82} 83 84 85bool 86SBInstructionList::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 const uint32_t max_opcode_byte_size = m_opaque_sp->GetInstructionList().GetMaxOpcocdeByteSize(); 97 for (size_t i=0; i<num_instructions; ++i) 98 { 99 Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get(); 100 if (inst == NULL) 101 break; 102 inst->Dump (&sref, max_opcode_byte_size, true, false, NULL, false); 103 sref.EOL(); 104 } 105 return true; 106 } 107 } 108 return false; 109} 110 111 112