Added the ability to get the disassembly instructions from the function and
symbol.

llvm-svn: 115734
diff --git a/lldb/source/API/SBInstructionList.cpp b/lldb/source/API/SBInstructionList.cpp
index d34e9d1..b27ddfa 100644
--- a/lldb/source/API/SBInstructionList.cpp
+++ b/lldb/source/API/SBInstructionList.cpp
@@ -9,11 +9,16 @@
 
 #include "lldb/API/SBInstructionList.h"
 #include "lldb/API/SBInstruction.h"
+#include "lldb/API/SBStream.h"
+#include "lldb/Core/Disassembler.h"
+#include "lldb/Core/Stream.h"
 
 using namespace lldb;
+using namespace lldb_private;
 
 
-SBInstructionList::SBInstructionList ()
+SBInstructionList::SBInstructionList () :
+    m_opaque_sp()
 {
 }
 
@@ -24,6 +29,8 @@
 size_t
 SBInstructionList::GetSize ()
 {
+    if (m_opaque_sp)
+        return m_opaque_sp->GetInstructionList().GetSize();
     return 0;
 }
 
@@ -31,12 +38,15 @@
 SBInstructionList::GetInstructionAtIndex (uint32_t idx)
 {
     SBInstruction inst;
+    if (m_opaque_sp && idx < m_opaque_sp->GetInstructionList().GetSize())
+        inst.SetOpaque (m_opaque_sp->GetInstructionList().GetInstructionAtIndex (idx));
     return inst;
 }
 
 void
 SBInstructionList::Clear ()
 {
+    m_opaque_sp.reset();
 }
 
 void
@@ -45,9 +55,42 @@
 }
 
 void
+SBInstructionList::SetDisassembler (const lldb::DisassemblerSP &opaque_sp)
+{
+    m_opaque_sp = opaque_sp;
+}
+
+void
 SBInstructionList::Print (FILE *out)
 {
     if (out == NULL)
         return;
 }
 
+
+bool
+SBInstructionList::GetDescription (lldb::SBStream &description)
+{
+    if (m_opaque_sp)
+    {
+        size_t num_instructions = GetSize ();
+        if (num_instructions)
+        {
+            // Call the ref() to make sure a stream is created if one deesn't 
+            // exist already inside description...
+            Stream &sref = description.ref();
+            for (size_t i=0; i<num_instructions; ++i)
+            {
+                Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get();
+                if (inst == NULL)
+                    break;
+                inst->Dump (&sref, true, NULL, 0, NULL, false);
+                sref.EOL();
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+