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