4801a9a356
2011-09-12 Pedro Alves <pedro@codesourcery.com> Matt Rice <ratmice@gmail.com> PR gdb/13175 * interps.c (struct interp) <interpreter_out>: Delete field. (interp_new): Remove the data and uiout parameters and adjust. (interp_set): Only set the current_uiout from the interpreter's uiout after initializing the interpreter. Adjust call to init_proc. (interp_ui_out): Adjust to call procs->ui_out_proc. (interp_data, interp_name): New. * interps.h (interp_init_ftype): Add `self' parameter. (interp_ui_out_ftype): New typedef. (struct interp_procs) <ui_out_proc>: New method pointer. (interp_new): Remove the data and uiout parameters. (interp_data, interp_name): Declare. * tui/tui-interp.c (tui_init): Adjust prototype. (tui_ui_out): New. (_initialize_tui_interp): Install tui_ui_out. Don't instanciate tui_out here. Adjust call to interp_new. * tui/tui-io.c (tui_initialize_io): Don't set current_uiout here. * cli/cli-interp.c (cli_interpreter_init): Adjust prototype. (cli_ui_out): New. (_initialize_cli_interp): Install it. Adjust call to interp_new. * mi/mi-common.h (struct mi_interp) <uiout>: New field. * mi/mi-interp.c (mi_interpreter_init): Adjust prototype. Initialize mi->uiout depending on the mi_version as extracted from the interpreter's name. (mi_ui_out): New. (_initialize_mi_interp): Install mi_ui_out. Adjust calls to interp_new. Don't allocate the ui_out's of the interpreters here. gdb/testsuite/ 2011-09-12 Matt Rice <ratmice@gmail.com> Pedro Alves <pedro@codesourcery.com> PR gdb/13175 * gdb.base/interp.exp: New tests. * gdb.base/interp.c: New file.
100 lines
3.7 KiB
C
100 lines
3.7 KiB
C
/* Manages interpreters for GDB, the GNU debugger.
|
|
|
|
Copyright (C) 2000, 2002, 2003, 2007, 2008, 2009, 2010, 2011
|
|
Free Software Foundation, Inc.
|
|
|
|
Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef INTERPS_H
|
|
#define INTERPS_H
|
|
|
|
#include "exceptions.h"
|
|
|
|
struct ui_out;
|
|
struct interp;
|
|
|
|
extern int interp_resume (struct interp *interp);
|
|
extern int interp_suspend (struct interp *interp);
|
|
extern int interp_prompt_p (struct interp *interp);
|
|
extern int interp_exec_p (struct interp *interp);
|
|
extern struct gdb_exception interp_exec (struct interp *interp,
|
|
const char *command);
|
|
extern int interp_quiet_p (struct interp *interp);
|
|
|
|
typedef void *(interp_init_ftype) (struct interp *self, int top_level);
|
|
typedef int (interp_resume_ftype) (void *data);
|
|
typedef int (interp_suspend_ftype) (void *data);
|
|
typedef int (interp_prompt_p_ftype) (void *data);
|
|
typedef struct gdb_exception (interp_exec_ftype) (void *data,
|
|
const char *command);
|
|
typedef void (interp_command_loop_ftype) (void *data);
|
|
typedef struct ui_out *(interp_ui_out_ftype) (struct interp *self);
|
|
|
|
struct interp_procs
|
|
{
|
|
interp_init_ftype *init_proc;
|
|
interp_resume_ftype *resume_proc;
|
|
interp_suspend_ftype *suspend_proc;
|
|
interp_exec_ftype *exec_proc;
|
|
interp_prompt_p_ftype *prompt_proc_p;
|
|
|
|
/* Returns the ui_out currently used to collect results for this
|
|
interpreter. It can be a formatter for stdout, as is the case
|
|
for the console & mi outputs, or it might be a result
|
|
formatter. */
|
|
interp_ui_out_ftype *ui_out_proc;
|
|
|
|
interp_command_loop_ftype *command_loop_proc;
|
|
};
|
|
|
|
extern struct interp *interp_new (const char *name, const struct interp_procs *procs);
|
|
extern void interp_add (struct interp *interp);
|
|
extern int interp_set (struct interp *interp, int top_level);
|
|
extern struct interp *interp_lookup (const char *name);
|
|
extern struct ui_out *interp_ui_out (struct interp *interp);
|
|
extern void *interp_data (struct interp *interp);
|
|
extern const char *interp_name (struct interp *interp);
|
|
|
|
extern int current_interp_named_p (const char *name);
|
|
extern int current_interp_display_prompt_p (void);
|
|
extern void current_interp_command_loop (void);
|
|
/* Returns opaque data associated with the top-level interpreter. */
|
|
extern void *top_level_interpreter_data (void);
|
|
extern struct interp *top_level_interpreter (void);
|
|
|
|
/* True if the current interpreter is in async mode, false if in sync
|
|
mode. If in sync mode, running a synchronous execution command
|
|
(with execute_command, e.g, "next") will not return until the
|
|
command is finished. If in async mode, then running a synchronous
|
|
command returns right after resuming the target. Waiting for the
|
|
command's completion is later done on the top event loop (using
|
|
continuations). */
|
|
extern int interpreter_async;
|
|
|
|
extern void clear_interpreter_hooks (void);
|
|
|
|
/* well-known interpreters */
|
|
#define INTERP_CONSOLE "console"
|
|
#define INTERP_MI1 "mi1"
|
|
#define INTERP_MI2 "mi2"
|
|
#define INTERP_MI3 "mi3"
|
|
#define INTERP_MI "mi"
|
|
#define INTERP_TUI "tui"
|
|
#define INTERP_INSIGHT "insight"
|
|
|
|
#endif
|