- Masking out SBCommandReturnObject::Printf() from the Python layer because SWIG and varargs do not get along well.

It is replaced by a Print("str") call which is equivalent to Printf("%s","str")
- Providing file-like behavior for SBStream with appropriate extension write() and flush() calls, plus documenting that these are only meant and only exist for Python
Documenting the file-like behavior on our website

llvm-svn: 177877
This commit is contained in:
Enrico Granata 2013-03-25 17:37:39 +00:00
parent 51cb2fa1c3
commit ceba071330
3 changed files with 34 additions and 6 deletions

View File

@ -86,8 +86,14 @@ public:
void
PutCString(const char* string, int len = -1);
size_t
Printf(const char* format, ...);
// wrapping the variadic Printf() with a plain Print()
// because it is hard to support varargs in SWIG bridgings
%extend {
void Print (const char* str)
{
self->Printf("%s", str);
}
}
};

View File

@ -68,6 +68,12 @@
else
return PyString_FromString("");
}
/* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
they are meant to make an SBCommandReturnObject into a file-like object so that instructions of the sort
print >>sb_command_return_object, "something"
will work correctly */
void lldb::SBCommandReturnObject::write (const char* str)
{
if (str)
@ -272,6 +278,20 @@
return PyString_FromString("");
}
}
%extend lldb::SBStream {
/* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage
they are meant to make an SBStream into a file-like object so that instructions of the sort
print >>sb_stream, "something"
will work correctly */
void lldb::SBStream::write (const char* str)
{
if (str)
$self->Printf("%s",str);
}
void lldb::SBStream::flush ()
{}
}
%extend lldb::SBSymbol {
PyObject *lldb::SBSymbol::__str__ (){
lldb::SBStream description;

View File

@ -368,10 +368,9 @@ Enter your Python command(s). Type 'DONE' to end.
<b>lldb.SBCommandReturnObject</b>
</td>
<td class="content">
A return object where you can indicate the success or failure of your command. You can also
provide information for the command result by printing data into it. You can also just print
data as you normally would in a python script and the output will show up; this is useful for
logging, but the real output for your command should go in the result object.
A return object which encapsulates success/failure information for the command and output text
that needs to be printed as a result of the command. The plain Python "print" command also works but
text won't go in the result by default (it is useful as a temporary logging facility).
</td>
</tr>
<tr>
@ -387,6 +386,9 @@ Enter your Python command(s). Type 'DONE' to end.
</td>
</tr>
</table>
<p>As a convenience, you can treat the result object as a Python file object, and say
print >>result, "my command does lots of cool stuff". SBCommandReturnObject and SBStream
both support this file-like behavior by providing write() and flush() calls at the Python layer.</p>
<p>One other handy convenience when defining lldb command-line commands is the command
<b>command script import</b> which will import a module specified by file path - so you
don't have to change your PYTHONPATH for temporary scripts. It also has another convenience