#include "ui-out.h"
#include "cli/cli-script.h"
#include "gdbcmd.h"
+#include "progspace.h"
#include "objfiles.h"
#include "observer.h"
#include "value.h"
}
}
- return PyErr_Format (PyExc_RuntimeError, "programmer error: unhandled type");
+ return PyErr_Format (PyExc_RuntimeError,
+ _("Programmer error: unhandled type."));
}
/* A Python function which returns a gdb parameter's value as a Python
GDB_PY_HANDLE_EXCEPTION (except);
if (!found)
return PyErr_Format (PyExc_RuntimeError,
- "could not find parameter `%s'", arg);
+ _("Could not find parameter `%s'."), arg);
if (! cmd->var)
- return PyErr_Format (PyExc_RuntimeError, "`%s' is not a parameter", arg);
+ return PyErr_Format (PyExc_RuntimeError,
+ _("`%s' is not a parameter."), arg);
return parameter_to_python (cmd);
}
}
/* Read a file as Python code. STREAM is the input file; FILE is the
- name of the file. */
+ name of the file.
+ STREAM is not closed, that is the caller's responsibility. */
void
-source_python_script (FILE *stream, char *file)
+source_python_script (FILE *stream, const char *file)
{
struct cleanup *cleanup;
PyRun_SimpleFile (stream, file);
- fclose (stream);
do_cleanups (cleanup);
}
\f
+/* Return the current Progspace.
+ There always is one. */
+
+static PyObject *
+gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
+{
+ PyObject *result;
+
+ result = pspace_to_pspace_object (current_program_space);
+ if (result)
+ Py_INCREF (result);
+ return result;
+}
+
+/* Return a sequence holding all the Progspaces. */
+
+static PyObject *
+gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
+{
+ struct program_space *ps;
+ PyObject *list;
+
+ list = PyList_New (0);
+ if (!list)
+ return NULL;
+
+ ALL_PSPACES (ps)
+ {
+ PyObject *item = pspace_to_pspace_object (ps);
+ if (!item || PyList_Append (list, item) == -1)
+ {
+ Py_DECREF (list);
+ return NULL;
+ }
+ }
+
+ return list;
+}
+
+\f
+
/* The "current" objfile. This is set when gdb detects that a new
objfile has been loaded. It is only set for the duration of a call
to gdbpy_new_objfile; it is NULL at other times. */
}
/* Return a sequence holding all the Objfiles. */
+
static PyObject *
gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
{
}
void
-source_python_script (FILE *stream, char *file)
+source_python_script (FILE *stream, const char *file)
{
- fclose (stream);
throw_error (UNSUPPORTED_ERROR,
_("Python scripting is not supported in this copy of GDB."));
}
gdbpy_initialize_blocks ();
gdbpy_initialize_functions ();
gdbpy_initialize_types ();
+ gdbpy_initialize_pspace ();
gdbpy_initialize_objfile ();
gdbpy_initialize_breakpoints ();
gdbpy_initialize_lazy_string ();
{ "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
"Find the default visualizer for a Value." },
+ { "current_progspace", gdbpy_get_current_progspace, METH_NOARGS,
+ "Return the current Progspace." },
+ { "progspaces", gdbpy_progspaces, METH_NOARGS,
+ "Return a sequence of all progspaces." },
+
{ "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
"Return the current Objfile being loaded, or None." },
{ "objfiles", gdbpy_objfiles, METH_NOARGS,