I have added a function to SBTarget that allows
clients to disassemble a series of raw bytes as
demonstrated by a new testcase.

In the future, this API will also allow clients
to provide a callback that adds comments for
addresses in the disassembly.

I also modified the SWIG harness to ensure that
Python ByteArrays work as well as strings as
sources of raw data.


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@146611 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/scripts/Python/interface/SBTarget.i b/scripts/Python/interface/SBTarget.i
index 04dcfbf..676a6c0 100644
--- a/scripts/Python/interface/SBTarget.i
+++ b/scripts/Python/interface/SBTarget.i
@@ -470,7 +470,10 @@
 
     lldb::SBBroadcaster
     GetBroadcaster () const;
-
+    
+    lldb::SBInstructionList
+    GetInstructions (lldb::SBAddress base_addr, const void *buf, size_t size);
+    
     bool
     GetDescription (lldb::SBStream &description, lldb::DescriptionLevel description_level);
 };
diff --git a/scripts/Python/python-typemaps.swig b/scripts/Python/python-typemaps.swig
index 55f2819..86ce7af 100644
--- a/scripts/Python/python-typemaps.swig
+++ b/scripts/Python/python-typemaps.swig
@@ -69,30 +69,48 @@
 // typemap for an outgoing buffer
 // See also SBEvent::SBEvent(uint32_t event, const char *cstr, uint32_t cstr_len).
 %typemap(in) (const char *cstr, uint32_t cstr_len) {
-   if (!PyString_Check($input)) {
-       PyErr_SetString(PyExc_ValueError, "Expecting a string");
-       return NULL;
+   if (PyString_Check($input)) {
+      $1 = (char *) PyString_AsString($input);
+      $2 = PyString_Size($input);
    }
-   $1 = (char *) PyString_AsString($input);
-   $2 = PyString_Size($input);
+   else if(PyByteArray_Check($input)) {
+      $1 = (char *) PyByteArray_AsString($input);
+      $2 = PyByteArray_Size($input);
+   }
+   else {
+      PyErr_SetString(PyExc_ValueError, "Expecting a string");
+      return NULL;
+   }
 }
 // Ditto for SBProcess::PutSTDIN(const char *src, size_t src_len).
 %typemap(in) (const char *src, size_t src_len) {
-   if (!PyString_Check($input)) {
-       PyErr_SetString(PyExc_ValueError, "Expecting a string");
-       return NULL;
+   if (PyString_Check($input)) {
+      $1 = (char *) PyString_AsString($input);
+      $2 = PyString_Size($input);
    }
-   $1 = (char *) PyString_AsString($input);
-   $2 = PyString_Size($input);
+   else if(PyByteArray_Check($input)) {
+      $1 = (char *) PyByteArray_AsString($input);
+      $2 = PyByteArray_Size($input);
+   }
+   else {
+      PyErr_SetString(PyExc_ValueError, "Expecting a string");
+      return NULL;
+   }
 }
 // And SBProcess::WriteMemory.
 %typemap(in) (const void *buf, size_t size) {
-   if (!PyString_Check($input)) {
-       PyErr_SetString(PyExc_ValueError, "Expecting a string");
-       return NULL;
+   if (PyString_Check($input)) {
+      $1 = (void *) PyString_AsString($input);
+      $2 = PyString_Size($input);
    }
-   $1 = (void *) PyString_AsString($input);
-   $2 = PyString_Size($input);
+   else if(PyByteArray_Check($input)) {
+      $1 = (void *) PyByteArray_AsString($input);
+      $2 = PyByteArray_Size($input);
+   }
+   else {
+      PyErr_SetString(PyExc_ValueError, "Expecting a string");
+      return NULL;
+   }
 }
 
 // typemap for an incoming buffer