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