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