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