2009-02-05  Tom Tromey  <tromey@redhat.com>
	    Thiago Jung Bauermann  <bauerman@br.ibm.com>

	* python/python.c (GdbMethods): Move to bottom of file.
	(get_parameter, execute_gdb_command, gdbpy_write,
	gdbpy_flush): Remove forward declarations.
	(eval_python_from_control_command): Fix error checking of function
	PyRun_SimpleString.  Fix error string.
	(python_command): Likewise.
	(execute_gdb_command): Added from_tty argument.

gdb/doc/
2009-02-05  Tom Tromey  <tromey@redhat.com>

	* gdb.texinfo (Basic Python): Document execute's from_tty
	argument.
This commit is contained in:
Thiago Jung Bauermann 2009-02-05 16:40:34 +00:00
parent 314b2e6679
commit 12453b93bd
4 changed files with 65 additions and 31 deletions

View File

@ -1,3 +1,14 @@
2009-02-05 Tom Tromey <tromey@redhat.com>
Thiago Jung Bauermann <bauerman@br.ibm.com>
* python/python.c (GdbMethods): Move to bottom of file.
(get_parameter, execute_gdb_command, gdbpy_write,
gdbpy_flush): Remove forward declarations.
(eval_python_from_control_command): Fix error checking of function
PyRun_SimpleString. Fix error string.
(python_command): Likewise.
(execute_gdb_command): Added from_tty argument.
2009-02-05 Thiago Jung Bauermann <bauerman@br.ibm.com>
* language.h (language_dfn): Add la_get_string member.

View File

@ -1,3 +1,8 @@
2009-02-05 Tom Tromey <tromey@redhat.com>
* gdb.texinfo (Basic Python): Document execute's from_tty
argument.
2009-02-04 Tom Tromey <tromey@redhat.com>
* gdb.texinfo (Basic Python): Document gdb.history.

View File

@ -18078,11 +18078,15 @@ methods and classes added by @value{GDBN} are placed in this module.
use in all scripts evaluated by the @code{python} command.
@findex gdb.execute
@defun execute command
@defun execute command [from_tty]
Evaluate @var{command}, a string, as a @value{GDBN} CLI command.
If a GDB exception happens while @var{command} runs, it is
translated as described in @ref{Exception Handling,,Exception Handling}.
If no exceptions occur, this function returns @code{None}.
@var{from_tty} specifies whether @value{GDBN} ought to consider this
command as having originated from the user invoking it interactively.
It must be a boolean value. If omitted, it defaults to @code{False}.
@end defun
@findex gdb.get_parameter

View File

@ -42,31 +42,10 @@ static int gdbpy_should_print_stack = 1;
#include "target.h"
#include "gdbthread.h"
static PyMethodDef GdbMethods[];
PyObject *gdb_module;
static PyObject *get_parameter (PyObject *, PyObject *);
static PyObject *execute_gdb_command (PyObject *, PyObject *);
static PyObject *gdbpy_write (PyObject *, PyObject *);
static PyObject *gdbpy_flush (PyObject *, PyObject *);
static PyMethodDef GdbMethods[] =
{
{ "history", gdbpy_history, METH_VARARGS,
"Get a value from history" },
{ "execute", execute_gdb_command, METH_VARARGS,
"Execute a gdb command" },
{ "get_parameter", get_parameter, METH_VARARGS,
"Return a gdb parameter's value" },
{ "write", gdbpy_write, METH_VARARGS,
"Write a string using gdb's filtered stream." },
{ "flush", gdbpy_flush, METH_NOARGS,
"Flush gdb's filtered stdout stream." },
{NULL, NULL, 0, NULL}
};
/* Given a command_line, return a command string suitable for passing
to Python. Lines in the string are separated by newlines. The
return value is allocated using xmalloc and the caller is
@ -102,6 +81,7 @@ compute_python_string (struct command_line *l)
void
eval_python_from_control_command (struct command_line *cmd)
{
int ret;
char *script;
struct cleanup *cleanup;
PyGILState_STATE state;
@ -113,12 +93,12 @@ eval_python_from_control_command (struct command_line *cmd)
cleanup = make_cleanup_py_restore_gil (&state);
script = compute_python_string (cmd->body_list[0]);
PyRun_SimpleString (script);
ret = PyRun_SimpleString (script);
xfree (script);
if (PyErr_Occurred ())
if (ret)
{
gdbpy_print_stack ();
error (_("error while executing Python code"));
error (_("Error while executing Python code."));
}
do_cleanups (cleanup);
@ -139,11 +119,10 @@ python_command (char *arg, int from_tty)
++arg;
if (arg && *arg)
{
PyRun_SimpleString (arg);
if (PyErr_Occurred ())
if (PyRun_SimpleString (arg))
{
gdbpy_print_stack ();
error (_("error while executing Python code"));
error (_("Error while executing Python code."));
}
}
else
@ -256,14 +235,26 @@ execute_gdb_command (PyObject *self, PyObject *args)
{
struct cmd_list_element *alias, *prefix, *cmd;
char *arg, *newarg;
PyObject *from_tty_obj = NULL;
int from_tty;
int cmp;
volatile struct gdb_exception except;
if (! PyArg_ParseTuple (args, "s", &arg))
if (! PyArg_ParseTuple (args, "s|O!", &arg, &PyBool_Type, &from_tty_obj))
return NULL;
from_tty = 0;
if (from_tty_obj)
{
cmp = PyObject_IsTrue (from_tty_obj);
if (cmp < 0)
return NULL;
from_tty = cmp;
}
TRY_CATCH (except, RETURN_MASK_ALL)
{
execute_command (arg, 0);
execute_command (arg, from_tty);
}
GDB_PY_HANDLE_EXCEPTION (except);
@ -451,3 +442,26 @@ sys.stdout = GdbOutputFile()\n\
#endif /* HAVE_PYTHON */
}
#if HAVE_PYTHON
static PyMethodDef GdbMethods[] =
{
{ "history", gdbpy_history, METH_VARARGS,
"Get a value from history" },
{ "execute", execute_gdb_command, METH_VARARGS,
"Execute a gdb command" },
{ "get_parameter", get_parameter, METH_VARARGS,
"Return a gdb parameter's value" },
{ "write", gdbpy_write, METH_VARARGS,
"Write a string using gdb's filtered stream." },
{ "flush", gdbpy_flush, METH_NOARGS,
"Flush gdb's filtered stdout stream." },
{NULL, NULL, 0, NULL}
};
#endif /* HAVE_PYTHON */