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