GDB (xrefs)
py-cmd.c
Go to the documentation of this file.
1 /* gdb commands implemented in Python
2 
3  Copyright (C) 2008-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 
21 #include "defs.h"
22 #include "arch-utils.h"
23 #include "value.h"
24 #include "python-internal.h"
25 #include "charset.h"
26 #include "gdbcmd.h"
27 #include "cli/cli-decode.h"
28 #include "completer.h"
29 #include "language.h"
30 #include "py-ref.h"
31 
32 /* Struct representing built-in completion types. */
34 {
35  /* Python symbol name. */
36  const char *name;
37  /* Completion function. */
39 };
40 
41 static const struct cmdpy_completer completers[] =
42 {
43  { "COMPLETE_NONE", noop_completer },
44  { "COMPLETE_FILENAME", filename_completer },
45  { "COMPLETE_LOCATION", location_completer },
46  { "COMPLETE_COMMAND", command_completer },
47  { "COMPLETE_SYMBOL", symbol_completer },
48  { "COMPLETE_EXPRESSION", expression_completer },
49 };
50 
51 #define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
52 
53 /* A gdb command. For the time being only ordinary commands (not
54  set/show commands) are allowed. */
56 {
57  PyObject_HEAD
58 
59  /* The corresponding gdb command object, or NULL if the command is
60  no longer installed. */
62 
63  /* A prefix command requires storage for a list of its sub-commands.
64  A pointer to this is passed to add_prefix_command, and to add_cmd
65  for sub-commands of that prefix. If this Command is not a prefix
66  command, then this field is unused. */
68 };
69 
70 typedef struct cmdpy_object cmdpy_object;
71 
72 extern PyTypeObject cmdpy_object_type
73  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("cmdpy_object");
74 
75 /* Constants used by this module. */
76 static PyObject *invoke_cst;
77 static PyObject *complete_cst;
78 
79 
80 
81 /* Python function which wraps dont_repeat. */
82 static PyObject *
83 cmdpy_dont_repeat (PyObject *self, PyObject *args)
84 {
85  dont_repeat ();
86  Py_RETURN_NONE;
87 }
88 
89 
90 
91 /* Called if the gdb cmd_list_element is destroyed. */
92 
93 static void
94 cmdpy_destroyer (struct cmd_list_element *self, void *context)
95 {
97 
98  /* Release our hold on the command object. */
99  gdbpy_ref<cmdpy_object> cmd ((cmdpy_object *) context);
100  cmd->command = NULL;
101 
102  /* We allocated the name, doc string, and perhaps the prefix
103  name. */
104  xfree ((char *) self->name);
105  xfree ((char *) self->doc);
106  xfree ((char *) self->prefixname);
107 }
108 
109 /* Called by gdb to invoke the command. */
110 
111 static void
113  const char *args, int from_tty)
114 {
116 
118 
119  if (! obj)
120  error (_("Invalid invocation of Python command object."));
121  if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
122  {
123  if (obj->command->prefixname)
124  {
125  /* A prefix command does not need an invoke method. */
126  return;
127  }
128  error (_("Python command object missing 'invoke' method."));
129  }
130 
131  if (! args)
132  args = "";
133  gdbpy_ref<> argobj (PyUnicode_Decode (args, strlen (args), host_charset (),
134  NULL));
135  if (argobj == NULL)
136  {
138  error (_("Could not convert arguments to Python string."));
139  }
140 
141  gdbpy_ref<> ttyobj (from_tty ? Py_True : Py_False);
142  Py_INCREF (ttyobj.get ());
143  gdbpy_ref<> result (PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst,
144  argobj.get (), ttyobj.get (),
145  NULL));
146 
147  if (result == NULL)
148  {
149  PyObject *ptype, *pvalue, *ptraceback;
150 
151  PyErr_Fetch (&ptype, &pvalue, &ptraceback);
152 
153  /* Try to fetch an error message contained within ptype, pvalue.
154  When fetching the error message we need to make our own copy,
155  we no longer own ptype, pvalue after the call to PyErr_Restore. */
156 
158  msg (gdbpy_exception_to_string (ptype, pvalue));
159 
160  if (msg == NULL)
161  {
162  /* An error occurred computing the string representation of the
163  error message. This is rare, but we should inform the user. */
164  printf_filtered (_("An error occurred in a Python command\n"
165  "and then another occurred computing the "
166  "error message.\n"));
168  }
169 
170  /* Don't print the stack for gdb.GdbError exceptions.
171  It is generally used to flag user errors.
172 
173  We also don't want to print "Error occurred in Python command"
174  for user errors. However, a missing message for gdb.GdbError
175  exceptions is arguably a bug, so we flag it as such. */
176 
177  if (! PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
178  || msg == NULL || *msg == '\0')
179  {
180  PyErr_Restore (ptype, pvalue, ptraceback);
182  if (msg != NULL && *msg != '\0')
183  error (_("Error occurred in Python command: %s"), msg.get ());
184  else
185  error (_("Error occurred in Python command."));
186  }
187  else
188  {
189  Py_XDECREF (ptype);
190  Py_XDECREF (pvalue);
191  Py_XDECREF (ptraceback);
192  error ("%s", msg.get ());
193  }
194  }
195 }
196 
197 /* Helper function for the Python command completers (both "pure"
198  completer and brkchar handler). This function takes COMMAND, TEXT
199  and WORD and tries to call the Python method for completion with
200  these arguments.
201 
202  This function is usually called twice: once when we are figuring out
203  the break characters to be used, and another to perform the real
204  completion itself. The reason for this two step dance is that we
205  need to know the set of "brkchars" to use early on, before we
206  actually try to perform the completion. But if a Python command
207  supplies a "complete" method then we have to call that method
208  first: it may return as its result the kind of completion to
209  perform and that will in turn specify which brkchars to use. IOW,
210  we need the result of the "complete" method before we actually
211  perform the completion. The only situation when this function is
212  not called twice is when the user uses the "complete" command: in
213  this scenario, there is no call to determine the "brkchars".
214 
215  Ideally, it would be nice to cache the result of the first call (to
216  determine the "brkchars") and return this value directly in the
217  second call (to perform the actual completion). However, due to
218  the peculiarity of the "complete" command mentioned above, it is
219  possible to put GDB in a bad state if you perform a TAB-completion
220  and then a "complete"-completion sequentially. Therefore, we just
221  recalculate everything twice for TAB-completions.
222 
223  This function returns the PyObject representing the Python method
224  call. */
225 
226 static PyObject *
228  const char *text, const char *word)
229 {
231 
232  if (obj == NULL)
233  error (_("Invalid invocation of Python command object."));
234  if (!PyObject_HasAttr ((PyObject *) obj, complete_cst))
235  {
236  /* If there is no complete method, don't error. */
237  return NULL;
238  }
239 
240  gdbpy_ref<> textobj (PyUnicode_Decode (text, strlen (text), host_charset (),
241  NULL));
242  if (textobj == NULL)
243  error (_("Could not convert argument to Python string."));
244 
245  gdbpy_ref<> wordobj;
246  if (word == NULL)
247  {
248  /* "brkchars" phase. */
249  wordobj.reset (Py_None);
250  Py_INCREF (Py_None);
251  }
252  else
253  {
254  wordobj.reset (PyUnicode_Decode (word, strlen (word), host_charset (),
255  NULL));
256  if (wordobj == NULL)
257  error (_("Could not convert argument to Python string."));
258  }
259 
260  gdbpy_ref<> resultobj (PyObject_CallMethodObjArgs ((PyObject *) obj,
261  complete_cst,
262  textobj.get (),
263  wordobj.get (), NULL));
264  if (resultobj == NULL)
265  {
266  /* Just swallow errors here. */
267  PyErr_Clear ();
268  }
269 
270  return resultobj.release ();
271 }
272 
273 /* Python function called to determine the break characters of a
274  certain completer. We are only interested in knowing if the
275  completer registered by the user will return one of the integer
276  codes (see COMPLETER_* symbols). */
277 
278 static void
280  completion_tracker &tracker,
281  const char *text, const char *word)
282 {
284 
285  /* Calling our helper to obtain the PyObject of the Python
286  function. */
287  gdbpy_ref<> resultobj (cmdpy_completer_helper (command, text, word));
288 
289  /* Check if there was an error. */
290  if (resultobj == NULL)
291  return;
292 
293  if (PyInt_Check (resultobj.get ()))
294  {
295  /* User code may also return one of the completion constants,
296  thus requesting that sort of completion. We are only
297  interested in this kind of return. */
298  long value;
299 
300  if (!gdb_py_int_as_long (resultobj.get (), &value))
301  {
302  /* Ignore. */
303  PyErr_Clear ();
304  }
305  else if (value >= 0 && value < (long) N_COMPLETERS)
306  {
307  completer_handle_brkchars_ftype *brkchars_fn;
308 
309  /* This is the core of this function. Depending on which
310  completer type the Python function returns, we have to
311  adjust the break characters accordingly. */
313  (completers[value].completer));
314  brkchars_fn (command, tracker, text, word);
315  }
316  }
317 }
318 
319 /* Called by gdb for command completion. */
320 
321 static void
323  completion_tracker &tracker,
324  const char *text, const char *word)
325 {
327 
328  /* Calling our helper to obtain the PyObject of the Python
329  function. */
330  gdbpy_ref<> resultobj (cmdpy_completer_helper (command, text, word));
331 
332  /* If the result object of calling the Python function is NULL, it
333  means that there was an error. In this case, just give up. */
334  if (resultobj == NULL)
335  return;
336 
337  if (PyInt_Check (resultobj.get ()))
338  {
339  /* User code may also return one of the completion constants,
340  thus requesting that sort of completion. */
341  long value;
342 
343  if (! gdb_py_int_as_long (resultobj.get (), &value))
344  {
345  /* Ignore. */
346  PyErr_Clear ();
347  }
348  else if (value >= 0 && value < (long) N_COMPLETERS)
349  completers[value].completer (command, tracker, text, word);
350  }
351  else
352  {
353  gdbpy_ref<> iter (PyObject_GetIter (resultobj.get ()));
354 
355  if (iter == NULL)
356  return;
357 
358  bool got_matches = false;
359  while (true)
360  {
361  gdbpy_ref<> elt (PyIter_Next (iter.get ()));
362  if (elt == NULL)
363  break;
364 
365  if (! gdbpy_is_string (elt.get ()))
366  {
367  /* Skip problem elements. */
368  continue;
369  }
371  item (python_string_to_host_string (elt.get ()));
372  if (item == NULL)
373  {
374  /* Skip problem elements. */
375  PyErr_Clear ();
376  continue;
377  }
378  tracker.add_completion (std::move (item));
379  got_matches = true;
380  }
381 
382  /* If we got some results, ignore problems. Otherwise, report
383  the problem. */
384  if (got_matches && PyErr_Occurred ())
385  PyErr_Clear ();
386  }
387 }
388 
389 /* Helper for cmdpy_init which locates the command list to use and
390  pulls out the command name.
391 
392  NAME is the command name list. The final word in the list is the
393  name of the new command. All earlier words must be existing prefix
394  commands.
395 
396  *BASE_LIST is set to the final prefix command's list of
397  *sub-commands.
398 
399  START_LIST is the list in which the search starts.
400 
401  This function returns the xmalloc()d name of the new command. On
402  error sets the Python error and returns NULL. */
403 
404 char *
406  struct cmd_list_element ***base_list,
407  struct cmd_list_element **start_list)
408 {
409  struct cmd_list_element *elt;
410  int len = strlen (name);
411  int i, lastchar;
412  char *prefix_text;
413  const char *prefix_text2;
414  char *result;
415 
416  /* Skip trailing whitespace. */
417  for (i = len - 1; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
418  ;
419  if (i < 0)
420  {
421  PyErr_SetString (PyExc_RuntimeError, _("No command name found."));
422  return NULL;
423  }
424  lastchar = i;
425 
426  /* Find first character of the final word. */
427  for (; i > 0 && (isalnum (name[i - 1])
428  || name[i - 1] == '-'
429  || name[i - 1] == '_');
430  --i)
431  ;
432  result = (char *) xmalloc (lastchar - i + 2);
433  memcpy (result, &name[i], lastchar - i + 1);
434  result[lastchar - i + 1] = '\0';
435 
436  /* Skip whitespace again. */
437  for (--i; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
438  ;
439  if (i < 0)
440  {
441  *base_list = start_list;
442  return result;
443  }
444 
445  prefix_text = (char *) xmalloc (i + 2);
446  memcpy (prefix_text, name, i + 1);
447  prefix_text[i + 1] = '\0';
448 
449  prefix_text2 = prefix_text;
450  elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1);
451  if (elt == NULL || elt == CMD_LIST_AMBIGUOUS)
452  {
453  PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."),
454  prefix_text);
455  xfree (prefix_text);
456  xfree (result);
457  return NULL;
458  }
459 
460  if (elt->prefixlist)
461  {
462  xfree (prefix_text);
463  *base_list = elt->prefixlist;
464  return result;
465  }
466 
467  PyErr_Format (PyExc_RuntimeError, _("'%s' is not a prefix command."),
468  prefix_text);
469  xfree (prefix_text);
470  xfree (result);
471  return NULL;
472 }
473 
474 /* Object initializer; sets up gdb-side structures for command.
475 
476  Use: __init__(NAME, COMMAND_CLASS [, COMPLETER_CLASS][, PREFIX]]).
477 
478  NAME is the name of the command. It may consist of multiple words,
479  in which case the final word is the name of the new command, and
480  earlier words must be prefix commands.
481 
482  COMMAND_CLASS is the kind of command. It should be one of the COMMAND_*
483  constants defined in the gdb module.
484 
485  COMPLETER_CLASS is the kind of completer. If not given, the
486  "complete" method will be used. Otherwise, it should be one of the
487  COMPLETE_* constants defined in the gdb module.
488 
489  If PREFIX is True, then this command is a prefix command.
490 
491  The documentation for the command is taken from the doc string for
492  the python class. */
493 
494 static int
495 cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
496 {
497  cmdpy_object *obj = (cmdpy_object *) self;
498  const char *name;
499  int cmdtype;
500  int completetype = -1;
501  char *docstring = NULL;
502  struct cmd_list_element **cmd_list;
503  char *cmd_name, *pfx_name;
504  static const char *keywords[] = { "name", "command_class", "completer_class",
505  "prefix", NULL };
506  PyObject *is_prefix = NULL;
507  int cmp;
508 
509  if (obj->command)
510  {
511  /* Note: this is apparently not documented in Python. We return
512  0 for success, -1 for failure. */
513  PyErr_Format (PyExc_RuntimeError,
514  _("Command object already initialized."));
515  return -1;
516  }
517 
518  if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "si|iO",
519  keywords, &name, &cmdtype,
520  &completetype, &is_prefix))
521  return -1;
522 
523  if (cmdtype != no_class && cmdtype != class_run
524  && cmdtype != class_vars && cmdtype != class_stack
525  && cmdtype != class_files && cmdtype != class_support
526  && cmdtype != class_info && cmdtype != class_breakpoint
527  && cmdtype != class_trace && cmdtype != class_obscure
528  && cmdtype != class_maintenance && cmdtype != class_user)
529  {
530  PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
531  return -1;
532  }
533 
534  if (completetype < -1 || completetype >= (int) N_COMPLETERS)
535  {
536  PyErr_Format (PyExc_RuntimeError,
537  _("Invalid completion type argument."));
538  return -1;
539  }
540 
541  cmd_name = gdbpy_parse_command_name (name, &cmd_list, &cmdlist);
542  if (! cmd_name)
543  return -1;
544 
545  pfx_name = NULL;
546  if (is_prefix != NULL)
547  {
548  cmp = PyObject_IsTrue (is_prefix);
549  if (cmp == 1)
550  {
551  int i, out;
552 
553  /* Make a normalized form of the command name. */
554  pfx_name = (char *) xmalloc (strlen (name) + 2);
555 
556  i = 0;
557  out = 0;
558  while (name[i])
559  {
560  /* Skip whitespace. */
561  while (name[i] == ' ' || name[i] == '\t')
562  ++i;
563  /* Copy non-whitespace characters. */
564  while (name[i] && name[i] != ' ' && name[i] != '\t')
565  pfx_name[out++] = name[i++];
566  /* Add a single space after each word -- including the final
567  word. */
568  pfx_name[out++] = ' ';
569  }
570  pfx_name[out] = '\0';
571  }
572  else if (cmp < 0)
573  {
574  xfree (cmd_name);
575  return -1;
576  }
577  }
578  if (PyObject_HasAttr (self, gdbpy_doc_cst))
579  {
580  gdbpy_ref<> ds_obj (PyObject_GetAttr (self, gdbpy_doc_cst));
581 
582  if (ds_obj != NULL && gdbpy_is_string (ds_obj.get ()))
583  {
584  docstring = python_string_to_host_string (ds_obj.get ()).release ();
585  if (docstring == NULL)
586  {
587  xfree (cmd_name);
588  xfree (pfx_name);
589  return -1;
590  }
591  }
592  }
593  if (! docstring)
594  docstring = xstrdup (_("This command is not documented."));
595 
596  Py_INCREF (self);
597 
598  TRY
599  {
600  struct cmd_list_element *cmd;
601 
602  if (pfx_name)
603  {
604  int allow_unknown;
605 
606  /* If we have our own "invoke" method, then allow unknown
607  sub-commands. */
608  allow_unknown = PyObject_HasAttr (self, invoke_cst);
609  cmd = add_prefix_cmd (cmd_name, (enum command_class) cmdtype,
610  NULL, docstring, &obj->sub_list,
611  pfx_name, allow_unknown, cmd_list);
612  }
613  else
614  cmd = add_cmd (cmd_name, (enum command_class) cmdtype,
615  docstring, cmd_list);
616 
617  /* There appears to be no API to set this. */
618  cmd->func = cmdpy_function;
619  cmd->destroyer = cmdpy_destroyer;
620 
621  obj->command = cmd;
622  set_cmd_context (cmd, self);
623  set_cmd_completer (cmd, ((completetype == -1) ? cmdpy_completer
624  : completers[completetype].completer));
625  if (completetype == -1)
628  }
629  CATCH (except, RETURN_MASK_ALL)
630  {
631  xfree (cmd_name);
632  xfree (docstring);
633  xfree (pfx_name);
634  Py_DECREF (self);
635  PyErr_Format (except.reason == RETURN_QUIT
636  ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
637  "%s", except.message);
638  return -1;
639  }
640  END_CATCH
641 
642  return 0;
643 }
644 
645 
646 
647 /* Initialize the 'commands' code. */
648 
649 int
651 {
652  int i;
653 
654  cmdpy_object_type.tp_new = PyType_GenericNew;
655  if (PyType_Ready (&cmdpy_object_type) < 0)
656  return -1;
657 
658  /* Note: alias and user are special; pseudo appears to be unused,
659  and there is no reason to expose tui, I think. */
660  if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0
661  || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0
662  || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0
663  || PyModule_AddIntConstant (gdb_module, "COMMAND_STACK", class_stack) < 0
664  || PyModule_AddIntConstant (gdb_module, "COMMAND_FILES", class_files) < 0
665  || PyModule_AddIntConstant (gdb_module, "COMMAND_SUPPORT",
666  class_support) < 0
667  || PyModule_AddIntConstant (gdb_module, "COMMAND_STATUS", class_info) < 0
668  || PyModule_AddIntConstant (gdb_module, "COMMAND_BREAKPOINTS",
669  class_breakpoint) < 0
670  || PyModule_AddIntConstant (gdb_module, "COMMAND_TRACEPOINTS",
671  class_trace) < 0
672  || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
673  class_obscure) < 0
674  || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
675  class_maintenance) < 0
676  || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0)
677  return -1;
678 
679  for (i = 0; i < N_COMPLETERS; ++i)
680  {
681  if (PyModule_AddIntConstant (gdb_module, completers[i].name, i) < 0)
682  return -1;
683  }
684 
685  if (gdb_pymodule_addobject (gdb_module, "Command",
686  (PyObject *) &cmdpy_object_type) < 0)
687  return -1;
688 
689  invoke_cst = PyString_FromString ("invoke");
690  if (invoke_cst == NULL)
691  return -1;
692  complete_cst = PyString_FromString ("complete");
693  if (complete_cst == NULL)
694  return -1;
695 
696  return 0;
697 }
698 
699 
700 
701 static PyMethodDef cmdpy_object_methods[] =
702 {
703  { "dont_repeat", cmdpy_dont_repeat, METH_NOARGS,
704  "Prevent command repetition when user enters empty line." },
705 
706  { 0 }
707 };
708 
709 PyTypeObject cmdpy_object_type =
710 {
711  PyVarObject_HEAD_INIT (NULL, 0)
712  "gdb.Command", /*tp_name*/
713  sizeof (cmdpy_object), /*tp_basicsize*/
714  0, /*tp_itemsize*/
715  0, /*tp_dealloc*/
716  0, /*tp_print*/
717  0, /*tp_getattr*/
718  0, /*tp_setattr*/
719  0, /*tp_compare*/
720  0, /*tp_repr*/
721  0, /*tp_as_number*/
722  0, /*tp_as_sequence*/
723  0, /*tp_as_mapping*/
724  0, /*tp_hash */
725  0, /*tp_call*/
726  0, /*tp_str*/
727  0, /*tp_getattro*/
728  0, /*tp_setattro*/
729  0, /*tp_as_buffer*/
730  Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
731  "GDB command object", /* tp_doc */
732  0, /* tp_traverse */
733  0, /* tp_clear */
734  0, /* tp_richcompare */
735  0, /* tp_weaklistoffset */
736  0, /* tp_iter */
737  0, /* tp_iternext */
738  cmdpy_object_methods, /* tp_methods */
739  0, /* tp_members */
740  0, /* tp_getset */
741  0, /* tp_base */
742  0, /* tp_dict */
743  0, /* tp_descr_get */
744  0, /* tp_descr_set */
745  0, /* tp_dictoffset */
746  cmdpy_init, /* tp_init */
747  0, /* tp_alloc */
748 };
749 
750 
751 
752 /* Utility to build a buildargv-like result from ARGS.
753  This intentionally parses arguments the way libiberty/argv.c:buildargv
754  does. It splits up arguments in a reasonable way, and we want a standard
755  way of parsing arguments. Several gdb commands use buildargv to parse their
756  arguments. Plus we want to be able to write compatible python
757  implementations of gdb commands. */
758 
759 PyObject *
760 gdbpy_string_to_argv (PyObject *self, PyObject *args)
761 {
762  const char *input;
763 
764  if (!PyArg_ParseTuple (args, "s", &input))
765  return NULL;
766 
767  gdbpy_ref<> py_argv (PyList_New (0));
768  if (py_argv == NULL)
769  return NULL;
770 
771  /* buildargv uses NULL to represent an empty argument list, but we can't use
772  that in Python. Instead, if ARGS is "" then return an empty list.
773  This undoes the NULL -> "" conversion that cmdpy_function does. */
774 
775  if (*input != '\0')
776  {
777  gdb_argv c_argv (input);
778 
779  for (char *arg : c_argv)
780  {
781  gdbpy_ref<> argp (PyString_FromString (arg));
782 
783  if (argp == NULL
784  || PyList_Append (py_argv.get (), argp.get ()) < 0)
785  return NULL;
786  }
787  }
788 
789  return py_argv.release ();
790 }
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
Definition: py-utils.c:376
void set_cmd_context(struct cmd_list_element *cmd, void *context)
Definition: cli-decode.c:142
#define Py_DECREF(op)
static void cmdpy_function(struct cmd_list_element *command, const char *args, int from_tty)
Definition: py-cmd.c:112
PyTypeObject cmdpy_object_type
Definition: py-cmd.c:709
struct cmdpy_object cmdpy_object
Definition: py-cmd.c:70
struct cmd_list_element * sub_list
Definition: py-cmd.c:67
void * get_cmd_context(struct cmd_list_element *cmd)
Definition: cli-decode.c:148
static void cmdpy_completer(struct cmd_list_element *command, completion_tracker &tracker, const char *text, const char *word)
Definition: py-cmd.c:322
void xfree(void *)
completer_handle_brkchars_ftype * completer_handle_brkchars_func_for_completer(completer_ftype *fn)
Definition: completer.c:1796
int gdbpy_is_string(PyObject *obj)
Definition: py-utils.c:173
unsigned int allow_unknown
Definition: cli-decode.h:90
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
Definition: cli-decode.c:262
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)
Definition: cli-decode.c:1385
void filename_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:152
struct cmd_list_element * cmdlist
Definition: cli-cmds.c:79
static PyObject * cmdpy_dont_repeat(PyObject *self, PyObject *args)
Definition: py-cmd.c:83
#define _(String)
Definition: gdb_locale.h:35
static int gdb_PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, const char **keywords,...)
#define PyVarObject_HEAD_INIT(type, size)
static void cmdpy_completer_handle_brkchars(struct cmd_list_element *command, completion_tracker &tracker, const char *text, const char *word)
Definition: py-cmd.c:279
#define END_CATCH
void printf_filtered(const char *format,...)
Definition: utils.c:2045
static PyObject * invoke_cst
Definition: py-cmd.c:76
void reset(T *obj)
Definition: gdb_ref_ptr.h:121
struct cmd_list_element * add_prefix_cmd(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc, struct cmd_list_element **prefixlist, const char *prefixname, int allow_unknown, struct cmd_list_element **list)
Definition: cli-decode.c:367
#define TRY
const char *const name
Definition: aarch64-tdep.c:76
PyObject * gdbpy_doc_cst
Definition: python.c:123
#define CATCH(EXCEPTION, MASK)
void noop_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *prefix)
Definition: completer.c:143
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
void set_cmd_completer(struct cmd_list_element *cmd, completer_ftype *completer)
Definition: cli-decode.c:160
void(* destroyer)(struct cmd_list_element *self, void *context)
Definition: cli-decode.h:177
PyObject_HEAD struct cmd_list_element * command
Definition: py-cmd.c:61
static void cmdpy_destroyer(struct cmd_list_element *self, void *context)
Definition: py-cmd.c:94
void command_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:1649
void set_cmd_completer_handle_brkchars(struct cmd_list_element *cmd, completer_handle_brkchars_ftype *func)
Definition: cli-decode.c:168
int gdbpy_initialize_commands(void)
Definition: py-cmd.c:650
void symbol_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:1111
struct gdbarch * get_current_arch(void)
Definition: arch-utils.c:798
char * gdbpy_parse_command_name(const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list)
Definition: py-cmd.c:405
static PyObject * complete_cst
Definition: py-cmd.c:77
PyObject * gdbpy_gdberror_exc
Definition: python.c:128
#define CMD_LIST_AMBIGUOUS
Definition: command.h:228
gdb::unique_xmalloc_ptr< char > python_string_to_host_string(PyObject *obj)
Definition: py-utils.c:152
void completer_ftype(struct cmd_list_element *, completion_tracker &tracker, const char *text, const char *word)
Definition: command.h:191
void * xmalloc(YYSIZE_T)
PyTypeObject cmdpy_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("cmdpy_object")
static const struct cmdpy_completer completers[]
Definition: py-cmd.c:41
Definition: value.c:169
static PyMethodDef cmdpy_object_methods[]
Definition: py-cmd.c:701
static int cmdpy_init(PyObject *self, PyObject *args, PyObject *kw)
Definition: py-cmd.c:495
void location_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *)
Definition: completer.c:828
PyObject * gdbpy_string_to_argv(PyObject *self, PyObject *args)
Definition: py-cmd.c:760
const struct language_defn * current_language
Definition: language.c:81
command_class
Definition: command.h:36
void expression_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:1076
void gdbpy_print_stack(void)
Definition: python.c:1262
void add_completion(gdb::unique_xmalloc_ptr< char > name, completion_match_for_lcd *match_for_lcd=NULL, const char *text=NULL, const char *word=NULL)
Definition: completer.c:1550
T * get() const
Definition: gdb_ref_ptr.h:130
completer_ftype * completer
Definition: py-cmd.c:38
void(* func)(struct cmd_list_element *c, const char *args, int from_tty)
Definition: cli-decode.h:110
int gdb_py_int_as_long(PyObject *obj, long *result)
Definition: py-utils.c:346
void completer_handle_brkchars_ftype(struct cmd_list_element *, completion_tracker &tracker, const char *text, const char *word)
Definition: command.h:196
struct cmd_list_element ** prefixlist
Definition: cli-decode.h:151
PyObject * gdb_module
Definition: python.c:116
gdb::unique_xmalloc_ptr< char > gdbpy_exception_to_string(PyObject *ptype, PyObject *pvalue)
Definition: py-utils.c:212
const char * host_charset(void)
Definition: charset.c:417
void dont_repeat(void)
Definition: top.c:695
completer_ftype * completer
Definition: cli-decode.h:164
static PyObject * cmdpy_completer_helper(struct cmd_list_element *command, const char *text, const char *word)
Definition: py-cmd.c:227
#define N_COMPLETERS
Definition: py-cmd.c:51
void error(const char *fmt,...)
Definition: errors.c:38
const char * name
Definition: py-cmd.c:36