1 /* Manages interpreters for GDB, the GNU debugger.
3 Copyright (C) 2000-2016 Free Software Foundation, Inc.
5 Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 /* This is just a first cut at separating out the "interpreter"
23 functions of gdb into self-contained modules. There are a couple
24 of open areas that need to be sorted out:
26 1) The interpreter explicitly contains a UI_OUT, and can insert itself
27 into the event loop, but it doesn't explicitly contain hooks for readline.
28 I did this because it seems to me many interpreters won't want to use
29 the readline command interface, and it is probably simpler to just let
30 them take over the input in their resume proc. */
35 #include "event-loop.h"
36 #include "event-top.h"
38 #include "completer.h"
39 #include "top.h" /* For command_loop. */
40 #include "continuations.h"
42 /* Each UI has its own independent set of interpreters. */
46 /* Each top level has its own independent set of interpreters. */
47 struct interp
*interp_list
;
48 struct interp
*current_interpreter
;
49 struct interp
*top_level_interpreter
;
51 /* The interpreter that is active while `interp_exec' is active, NULL
52 at all other times. */
53 struct interp
*command_interpreter
;
56 /* Get the current UI's ui_interp_info object. Never returns NULL. */
58 static struct ui_interp_info
*
59 get_current_interp_info (void)
61 struct ui
*ui
= current_ui
;
63 if (ui
->interp_info
== NULL
)
64 ui
->interp_info
= XCNEW (struct ui_interp_info
);
65 return ui
->interp_info
;
70 /* This is the name in "-i=" and set interpreter. */
73 /* Interpreters are stored in a linked list, this is the next
77 /* This is a cookie that an instance of the interpreter can use.
78 This is a bit confused right now as the exact initialization
79 sequence for it, and how it relates to the interpreter's uiout
80 object is a bit confused. */
83 /* Has the init_proc been run? */
86 const struct interp_procs
*procs
;
90 /* The magic initialization routine for this module. */
92 void _initialize_interpreter (void);
94 /* interp_new - This allocates space for a new interpreter,
95 fills the fields from the inputs, and returns a pointer to the
98 interp_new (const char *name
, const struct interp_procs
*procs
)
100 struct interp
*new_interp
;
102 new_interp
= XNEW (struct interp
);
104 new_interp
->name
= xstrdup (name
);
105 new_interp
->data
= NULL
;
106 new_interp
->quiet_p
= 0;
107 new_interp
->procs
= procs
;
108 new_interp
->inited
= 0;
110 /* Check for required procs. */
111 gdb_assert (procs
->command_loop_proc
!= NULL
);
116 /* Add interpreter INTERP to the gdb interpreter list. The
117 interpreter must not have previously been added. */
119 interp_add (struct interp
*interp
)
121 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
123 gdb_assert (interp_lookup (interp
->name
) == NULL
);
125 interp
->next
= ui_interp
->interp_list
;
126 ui_interp
->interp_list
= interp
;
129 /* This sets the current interpreter to be INTERP. If INTERP has not
130 been initialized, then this will also run the init proc. If the
131 init proc is successful, return 1, if it fails, set the old
132 interpreter back in place and return 0. If we can't restore the
133 old interpreter, then raise an internal error, since we are in
134 pretty bad shape at this point.
136 The TOP_LEVEL parameter tells if this new interpreter is
137 the top-level one. The top-level is what is requested
138 on the command line, and is responsible for reporting general
139 notification about target state changes. For example, if
140 MI is the top-level interpreter, then it will always report
141 events such as target stops and new thread creation, even if they
142 are caused by CLI commands. */
144 interp_set (struct interp
*interp
, int top_level
)
146 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
147 struct interp
*old_interp
= ui_interp
->current_interpreter
;
151 /* If we already have an interpreter, then trying to
152 set top level interpreter is kinda pointless. */
153 gdb_assert (!top_level
|| !ui_interp
->current_interpreter
);
154 gdb_assert (!top_level
|| !ui_interp
->top_level_interpreter
);
156 if (old_interp
!= NULL
)
158 ui_out_flush (current_uiout
);
159 if (old_interp
->procs
->suspend_proc
160 && !old_interp
->procs
->suspend_proc (old_interp
->data
))
162 error (_("Could not suspend interpreter \"%s\"."),
171 ui_interp
->current_interpreter
= interp
;
173 ui_interp
->top_level_interpreter
= interp
;
175 /* We use interpreter_p for the "set interpreter" variable, so we need
176 to make sure we have a malloc'ed copy for the set command to free. */
177 if (interpreter_p
!= NULL
178 && strcmp (interp
->name
, interpreter_p
) != 0)
180 xfree (interpreter_p
);
182 interpreter_p
= xstrdup (interp
->name
);
185 /* Run the init proc. If it fails, try to restore the old interp. */
189 if (interp
->procs
->init_proc
!= NULL
)
191 interp
->data
= interp
->procs
->init_proc (interp
, top_level
);
196 /* Do this only after the interpreter is initialized. */
197 current_uiout
= interp
->procs
->ui_out_proc (interp
);
199 /* Clear out any installed interpreter hooks/event handlers. */
200 clear_interpreter_hooks ();
202 if (interp
->procs
->resume_proc
!= NULL
203 && (!interp
->procs
->resume_proc (interp
->data
)))
205 if (old_interp
== NULL
|| !interp_set (old_interp
, 0))
206 internal_error (__FILE__
, __LINE__
,
207 _("Failed to initialize new interp \"%s\" %s"),
208 interp
->name
, "and could not restore old interp!\n");
212 if (!first_time
&& !interp_quiet_p (interp
))
214 xsnprintf (buffer
, sizeof (buffer
),
215 "Switching to interpreter \"%.24s\".\n", interp
->name
);
216 ui_out_text (current_uiout
, buffer
);
222 /* interp_lookup - Looks up the interpreter for NAME. If no such
223 interpreter exists, return NULL, otherwise return a pointer to the
226 interp_lookup (const char *name
)
228 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
229 struct interp
*interp
;
231 if (name
== NULL
|| strlen (name
) == 0)
234 for (interp
= ui_interp
->interp_list
;
236 interp
= interp
->next
)
238 if (strcmp (interp
->name
, name
) == 0)
245 /* Returns the current interpreter. */
248 interp_ui_out (struct interp
*interp
)
250 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
253 interp
= ui_interp
->current_interpreter
;
254 return interp
->procs
->ui_out_proc (interp
);
258 current_interp_set_logging (int start_log
, struct ui_file
*out
,
259 struct ui_file
*logfile
)
261 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
262 struct interp
*interp
= ui_interp
->current_interpreter
;
265 || interp
->procs
->set_logging_proc
== NULL
)
268 return interp
->procs
->set_logging_proc (interp
, start_log
, out
, logfile
);
271 /* Temporarily overrides the current interpreter. */
273 interp_set_temp (const char *name
)
275 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
276 struct interp
*interp
= interp_lookup (name
);
277 struct interp
*old_interp
= ui_interp
->current_interpreter
;
280 ui_interp
->current_interpreter
= interp
;
284 /* Returns the interpreter's cookie. */
287 interp_data (struct interp
*interp
)
292 /* Returns the interpreter's name. */
295 interp_name (struct interp
*interp
)
300 /* Returns true if the current interp is the passed in name. */
302 current_interp_named_p (const char *interp_name
)
304 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
305 struct interp
*interp
= ui_interp
->current_interpreter
;
308 return (strcmp (interp
->name
, interp_name
) == 0);
313 /* The interpreter that was active when a command was executed.
314 Normally that'd always be CURRENT_INTERPRETER, except that MI's
315 -interpreter-exec command doesn't actually flip the current
316 interpreter when running its sub-command. The
317 `command_interpreter' global tracks when interp_exec is called
318 (IOW, when -interpreter-exec is called). If that is set, it is
319 INTERP in '-interpreter-exec INTERP "CMD"' or in 'interpreter-exec
320 INTERP "CMD". Otherwise, interp_exec isn't active, and so the
321 interpreter running the command is the current interpreter. */
324 command_interp (void)
326 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
328 if (ui_interp
->command_interpreter
!= NULL
)
329 return ui_interp
->command_interpreter
;
331 return ui_interp
->current_interpreter
;
334 /* Run the current command interpreter's main loop. */
336 current_interp_command_loop (void)
338 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
339 struct interp
*interp
= ui_interp
->current_interpreter
;
341 gdb_assert (ui_interp
->current_interpreter
!= NULL
);
343 interp
->procs
->command_loop_proc (interp
->data
);
347 interp_quiet_p (struct interp
*interp
)
349 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
352 return interp
->quiet_p
;
354 return ui_interp
->current_interpreter
->quiet_p
;
358 interp_set_quiet (struct interp
*interp
, int quiet
)
360 int old_val
= interp
->quiet_p
;
362 interp
->quiet_p
= quiet
;
366 /* interp_exec - This executes COMMAND_STR in the current
370 interp_exec (struct interp
*interp
, const char *command_str
)
372 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
374 struct gdb_exception ex
;
375 struct interp
*save_command_interp
;
377 gdb_assert (interp
->procs
->exec_proc
!= NULL
);
379 /* See `command_interp' for why we do this. */
380 save_command_interp
= ui_interp
->command_interpreter
;
381 ui_interp
->command_interpreter
= interp
;
383 ex
= interp
->procs
->exec_proc (interp
->data
, command_str
);
385 ui_interp
->command_interpreter
= save_command_interp
;
390 /* A convenience routine that nulls out all the common command hooks.
391 Use it when removing your interpreter in its suspend proc. */
393 clear_interpreter_hooks (void)
395 deprecated_print_frame_info_listing_hook
= 0;
396 /*print_frame_more_info_hook = 0; */
397 deprecated_query_hook
= 0;
398 deprecated_warning_hook
= 0;
399 deprecated_interactive_hook
= 0;
400 deprecated_readline_begin_hook
= 0;
401 deprecated_readline_hook
= 0;
402 deprecated_readline_end_hook
= 0;
403 deprecated_context_hook
= 0;
404 deprecated_target_wait_hook
= 0;
405 deprecated_call_command_hook
= 0;
406 deprecated_error_begin_hook
= 0;
410 interpreter_exec_cmd (char *args
, int from_tty
)
412 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
413 struct interp
*old_interp
, *interp_to_use
;
414 char **prules
= NULL
;
418 int old_quiet
, use_quiet
;
419 struct cleanup
*cleanup
;
422 error_no_arg (_("interpreter-exec command"));
424 prules
= gdb_buildargv (args
);
425 cleanup
= make_cleanup_freeargv (prules
);
428 for (trule
= prules
; *trule
!= NULL
; trule
++)
432 error (_("usage: interpreter-exec <interpreter> [ <command> ... ]"));
434 old_interp
= ui_interp
->current_interpreter
;
436 interp_to_use
= interp_lookup (prules
[0]);
437 if (interp_to_use
== NULL
)
438 error (_("Could not find interpreter \"%s\"."), prules
[0]);
440 /* Temporarily set interpreters quiet. */
441 old_quiet
= interp_set_quiet (old_interp
, 1);
442 use_quiet
= interp_set_quiet (interp_to_use
, 1);
444 if (!interp_set (interp_to_use
, 0))
445 error (_("Could not switch to interpreter \"%s\"."), prules
[0]);
447 for (i
= 1; i
< nrules
; i
++)
449 struct gdb_exception e
= interp_exec (interp_to_use
, prules
[i
]);
453 interp_set (old_interp
, 0);
454 interp_set_quiet (interp_to_use
, use_quiet
);
455 interp_set_quiet (old_interp
, old_quiet
);
456 error (_("error in command: \"%s\"."), prules
[i
]);
460 interp_set (old_interp
, 0);
461 interp_set_quiet (interp_to_use
, use_quiet
);
462 interp_set_quiet (old_interp
, old_quiet
);
464 do_cleanups (cleanup
);
467 /* List the possible interpreters which could complete the given text. */
468 static VEC (char_ptr
) *
469 interpreter_completer (struct cmd_list_element
*ignore
,
470 const char *text
, const char *word
)
472 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
474 VEC (char_ptr
) *matches
= NULL
;
475 struct interp
*interp
;
477 textlen
= strlen (text
);
478 for (interp
= ui_interp
->interp_list
;
480 interp
= interp
->next
)
482 if (strncmp (interp
->name
, text
, textlen
) == 0)
486 match
= (char *) xmalloc (strlen (word
) + strlen (interp
->name
) + 1);
488 strcpy (match
, interp
->name
);
489 else if (word
> text
)
491 /* Return some portion of interp->name. */
492 strcpy (match
, interp
->name
+ (word
- text
));
496 /* Return some of text plus interp->name. */
497 strncpy (match
, word
, text
- word
);
498 match
[text
- word
] = '\0';
499 strcat (match
, interp
->name
);
501 VEC_safe_push (char_ptr
, matches
, match
);
509 top_level_interpreter (void)
511 struct ui_interp_info
*ui_interp
= get_current_interp_info ();
513 return ui_interp
->top_level_interpreter
;
517 top_level_interpreter_data (void)
519 struct interp
*interp
;
521 interp
= top_level_interpreter ();
522 gdb_assert (interp
!= NULL
);
526 /* This just adds the "interpreter-exec" command. */
528 _initialize_interpreter (void)
530 struct cmd_list_element
*c
;
532 c
= add_cmd ("interpreter-exec", class_support
,
533 interpreter_exec_cmd
, _("\
534 Execute a command in an interpreter. It takes two arguments:\n\
535 The first argument is the name of the interpreter to use.\n\
536 The second argument is the command to execute.\n"), &cmdlist
);
537 set_cmd_completer (c
, interpreter_completer
);