44 {
"COMPLETE_NONE", noop_completer },
45 {
"COMPLETE_FILENAME", filename_completer },
46 {
"COMPLETE_LOCATION", location_completer },
47 {
"COMPLETE_COMMAND", command_completer },
48 {
"COMPLETE_SYMBOL", make_symbol_completion_list_fn },
49 {
"COMPLETE_EXPRESSION", expression_completer },
52 #define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
109 xfree ((
char *) self->name);
110 xfree ((
char *) self->doc);
111 xfree ((
char *) self->prefixname);
122 PyObject *argobj, *ttyobj, *result;
128 error (
_(
"Invalid invocation of Python command object."));
129 if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
137 error (
_(
"Python command object missing 'invoke' method."));
142 argobj = PyUnicode_Decode (args, strlen (args),
host_charset (), NULL);
146 error (
_(
"Could not convert arguments to Python string."));
149 ttyobj = from_tty ? Py_True : Py_False;
151 result = PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, argobj,
158 PyObject *ptype, *pvalue, *ptraceback;
161 PyErr_Fetch (&ptype, &pvalue, &ptraceback);
175 "and then another occurred computing the "
176 "error message.\n"));
188 || msg == NULL || *msg ==
'\0')
190 PyErr_Restore (ptype, pvalue, ptraceback);
192 if (msg != NULL && *msg !=
'\0')
193 error (
_(
"Error occurred in Python command: %s"), msg);
195 error (
_(
"Error occurred in Python command."));
201 Py_XDECREF (ptraceback);
241 const char *text,
const char *
word)
244 PyObject *textobj, *wordobj;
248 error (
_(
"Invalid invocation of Python command object."));
249 if (!PyObject_HasAttr ((PyObject *) obj, complete_cst))
255 textobj = PyUnicode_Decode (text, strlen (text),
host_charset (), NULL);
257 error (
_(
"Could not convert argument to Python string."));
258 wordobj = PyUnicode_Decode (word, strlen (word),
host_charset (), NULL);
262 error (
_(
"Could not convert argument to Python string."));
265 resultobj = PyObject_CallMethodObjArgs ((PyObject *) obj, complete_cst,
266 textobj, wordobj, NULL);
275 Py_XINCREF (resultobj);
287 const char *text,
const char *
word)
289 PyObject *resultobj = NULL;
299 if (resultobj == NULL)
302 if (PyInt_Check (resultobj))
320 (completers[value].completer);
326 Py_XDECREF (resultobj);
334 const char *text,
const char *
word)
336 PyObject *resultobj = NULL;
349 if (resultobj == NULL)
353 if (PyInt_Check (resultobj))
365 result = completers[value].
completer (command, text, word);
369 PyObject *iter = PyObject_GetIter (resultobj);
375 while ((elt = PyIter_Next (iter)) != NULL)
400 if (result != NULL && PyErr_Occurred ())
406 Py_XDECREF (resultobj);
433 int len = strlen (name);
436 const char *prefix_text2;
440 for (i = len - 1; i >= 0 && (name[i] ==
' ' || name[i] ==
'\t'); --i)
444 PyErr_SetString (PyExc_RuntimeError,
_(
"No command name found."));
450 for (; i > 0 && (isalnum (name[i - 1])
451 || name[i - 1] ==
'-'
452 || name[i - 1] ==
'_');
455 result =
xmalloc (lastchar - i + 2);
456 memcpy (result, &name[i], lastchar - i + 1);
457 result[lastchar - i + 1] =
'\0';
460 for (--i; i >= 0 && (name[i] ==
' ' || name[i] ==
'\t'); --i)
464 *base_list = start_list;
469 memcpy (prefix_text, name, i + 1);
470 prefix_text[i + 1] =
'\0';
472 prefix_text2 = prefix_text;
473 elt =
lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1);
476 PyErr_Format (PyExc_RuntimeError,
_(
"Could not find command prefix %s."),
490 PyErr_Format (PyExc_RuntimeError,
_(
"'%s' is not a prefix command."),
523 int completetype = -1;
524 char *docstring = NULL;
526 char *cmd_name, *pfx_name;
527 static char *keywords[] = {
"name",
"command_class",
"completer_class",
529 PyObject *is_prefix = NULL;
536 PyErr_Format (PyExc_RuntimeError,
537 _(
"Command object already initialized."));
541 if (! PyArg_ParseTupleAndKeywords (args, kw,
"si|iO",
542 keywords, &name, &cmdtype,
543 &completetype, &is_prefix))
553 PyErr_Format (PyExc_RuntimeError,
_(
"Invalid command class argument."));
557 if (completetype < -1 || completetype >= (
int)
N_COMPLETERS)
559 PyErr_Format (PyExc_RuntimeError,
560 _(
"Invalid completion type argument."));
569 if (is_prefix != NULL)
571 cmp = PyObject_IsTrue (is_prefix);
577 pfx_name =
xmalloc (strlen (name) + 2);
584 while (name[i] ==
' ' || name[i] ==
'\t')
587 while (name[i] && name[i] !=
' ' && name[i] !=
'\t')
588 pfx_name[out++] = name[i++];
591 pfx_name[out++] =
' ';
593 pfx_name[out] =
'\0';
608 if (docstring == NULL)
620 docstring = xstrdup (
_(
"This command is not documented."));
634 allow_unknown = PyObject_HasAttr (
self, invoke_cst);
637 pfx_name, allow_unknown, cmd_list);
641 docstring, cmd_list);
651 if (completetype == -1)
662 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
663 "%s", except.message);
691 || PyModule_AddIntConstant (
gdb_module,
"COMMAND_SUPPORT",
694 || PyModule_AddIntConstant (
gdb_module,
"COMMAND_BREAKPOINTS",
696 || PyModule_AddIntConstant (
gdb_module,
"COMMAND_TRACEPOINTS",
698 || PyModule_AddIntConstant (
gdb_module,
"COMMAND_OBSCURE",
700 || PyModule_AddIntConstant (
gdb_module,
"COMMAND_MAINTENANCE",
707 if (PyModule_AddIntConstant (
gdb_module, completers[i].
name, i) < 0)
715 invoke_cst = PyString_FromString (
"invoke");
716 if (invoke_cst == NULL)
718 complete_cst = PyString_FromString (
"complete");
719 if (complete_cst == NULL)
730 "Prevent command repetition when user enters empty line." },
756 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
757 "GDB command object",
764 cmdpy_object_methods,
791 if (!PyArg_ParseTuple (args,
"s", &input))
794 py_argv = PyList_New (0);
807 for (i = 0; c_argv[i] != NULL; ++i)
809 PyObject *argp = PyString_FromString (c_argv[i]);
812 || PyList_Append (py_argv, argp) < 0)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
void set_cmd_context(struct cmd_list_element *cmd, void *context)
struct cmd_list_element * add_prefix_cmd(const char *name, enum command_class theclass, cmd_cfunc_ftype *fun, const char *doc, struct cmd_list_element **prefixlist, const char *prefixname, int allow_unknown, struct cmd_list_element **list)
PyTypeObject cmdpy_object_type
struct cmdpy_object cmdpy_object
struct cmd_list_element * sub_list
void * get_cmd_context(struct cmd_list_element *cmd)
int gdbpy_is_string(PyObject *obj)
unsigned int allow_unknown
static void cmdpy_completer_handle_brkchars(struct cmd_list_element *command, const char *text, const char *word)
struct cmd_list_element * lookup_cmd_1(const char **text, struct cmd_list_element *clist, struct cmd_list_element **result_list, int ignore_help_classes)
#define VEC_safe_push(T, V, O)
struct cmd_list_element * cmdlist
static PyObject * cmdpy_dont_repeat(PyObject *self, PyObject *args)
void printf_filtered(const char *format,...)
static PyObject * invoke_cst
void set_cmd_completer_handle_brkchars(struct cmd_list_element *cmd, completer_ftype_void *completer_handle_brkchars)
#define CATCH(EXCEPTION, MASK)
void set_cmd_completer(struct cmd_list_element *cmd, completer_ftype *completer)
void(* destroyer)(struct cmd_list_element *self, void *context)
PyObject_HEAD struct cmd_list_element * command
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, cmd_cfunc_ftype *fun, const char *doc, struct cmd_list_element **list)
static void cmdpy_destroyer(struct cmd_list_element *self, void *context)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
char * python_string_to_host_string(PyObject *obj)
int gdbpy_initialize_commands(void)
struct gdbarch * get_current_arch(void)
char * gdbpy_parse_command_name(const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list)
struct cleanup * ensure_python_env(struct gdbarch *gdbarch, const struct language_defn *language)
static PyObject * complete_cst
PyObject * gdbpy_gdberror_exc
#define CMD_LIST_AMBIGUOUS
PyTypeObject cmdpy_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("cmdpy_object")
void set_gdb_completion_word_break_characters(completer_ftype *fn)
static PyMethodDef cmdpy_object_methods[]
static int cmdpy_init(PyObject *self, PyObject *args, PyObject *kw)
static void cmdpy_function(struct cmd_list_element *command, char *args, int from_tty)
PyObject * gdbpy_string_to_argv(PyObject *self, PyObject *args)
const struct language_defn * current_language
void gdbpy_print_stack(void)
void(* func)(struct cmd_list_element *c, char *args, int from_tty)
char ** gdb_buildargv(const char *s)
completer_ftype * completer
int gdb_py_int_as_long(PyObject *obj, long *result)
struct cmd_list_element ** prefixlist
const char * host_charset(void)
completer_ftype * completer
static PyObject * cmdpy_completer_helper(struct cmd_list_element *command, const char *text, const char *word)
void error(const char *fmt,...)
char * gdbpy_exception_to_string(PyObject *ptype, PyObject *pvalue)
void do_cleanups(struct cleanup *old_chain)
const ULONGEST const LONGEST len
#define PyVarObject_HEAD_INIT(type, size)