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