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