X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Finterps.h;h=4ac08453357ca6505c05a8a7241066aaf577ee44;hb=b2d86570b316c347384c4ba9bb3933ed5e807fca;hp=197fa55be03128b310b265584585053ab2f19095;hpb=92bcb5f949b1d1f14df079bbe9fd3941c1e09919;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/interps.h b/gdb/interps.h index 197fa55be0..4ac0845335 100644 --- a/gdb/interps.h +++ b/gdb/interps.h @@ -1,6 +1,6 @@ /* Manages interpreters for GDB, the GNU debugger. - Copyright (C) 2000-2014 Free Software Foundation, Inc. + Copyright (C) 2000-2016 Free Software Foundation, Inc. Written by Jim Ingham of Apple Computer, Inc. @@ -22,10 +22,18 @@ #ifndef INTERPS_H #define INTERPS_H -#include "exceptions.h" - struct ui_out; struct interp; +struct ui; + +typedef struct interp *(*interp_factory_func) (const char *name); + +/* Each interpreter kind (CLI, MI, etc.) registers itself with a call + to this function, passing along its name, and a pointer to a + function that creates a new instance of an interpreter with that + name. */ +extern void interp_factory_register (const char *name, + interp_factory_func func); extern int interp_resume (struct interp *interp); extern int interp_suspend (struct interp *interp); @@ -38,13 +46,15 @@ typedef int (interp_resume_ftype) (void *data); typedef int (interp_suspend_ftype) (void *data); typedef struct gdb_exception (interp_exec_ftype) (void *data, const char *command); -typedef void (interp_command_loop_ftype) (void *data); +typedef void (interp_pre_command_loop_ftype) (struct interp *self); typedef struct ui_out *(interp_ui_out_ftype) (struct interp *self); typedef int (interp_set_logging_ftype) (struct interp *self, int start_log, struct ui_file *out, struct ui_file *logfile); +typedef int (interp_supports_command_editing_ftype) (struct interp *self); + struct interp_procs { interp_init_ftype *init_proc; @@ -63,13 +73,28 @@ struct interp_procs disabled. */ interp_set_logging_ftype *set_logging_proc; - interp_command_loop_ftype *command_loop_proc; + /* Called before starting an event loop, to give the interpreter a + chance to e.g., print a prompt. */ + interp_pre_command_loop_ftype *pre_command_loop_proc; + + /* Returns true if this interpreter supports using the readline + library; false if it uses GDB's own simplified readline + emulation. */ + interp_supports_command_editing_ftype *supports_command_editing_proc; }; -extern struct interp *interp_new (const char *name, const struct interp_procs *procs); -extern void interp_add (struct interp *interp); +extern struct interp *interp_new (const char *name, + const struct interp_procs *procs, + void *data); +extern void interp_add (struct ui *ui, struct interp *interp); extern int interp_set (struct interp *interp, int top_level); -extern struct interp *interp_lookup (const char *name); + +/* Look up the interpreter for NAME, creating one if none exists yet. + If NAME is not a interpreter type previously registered with + interp_factory_register, return NULL; otherwise return a pointer to + the interpreter. */ +extern struct interp *interp_lookup (struct ui *ui, 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); @@ -77,8 +102,6 @@ extern struct interp *interp_set_temp (const char *name); extern int current_interp_named_p (const char *name); -extern void current_interp_command_loop (void); - /* Call this function to give the current interpreter an opportunity to do any special handling of streams when logging is enabled or disabled. START_LOG is 1 when logging is starting, 0 when it ends, @@ -93,19 +116,21 @@ extern int current_interp_set_logging (int start_log, struct ui_file *out, extern void *top_level_interpreter_data (void); extern struct interp *top_level_interpreter (void); -extern struct interp *command_interp (void); +/* Return the current UI's current interpreter. */ +extern struct interp *current_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 struct interp *command_interp (void); extern void clear_interpreter_hooks (void); +/* Returns true if INTERP supports using the readline library; false + if it uses GDB's own simplified form of readline. */ +extern int interp_supports_command_editing (struct interp *interp); + +/* Called before starting an event loop, to give the interpreter a + chance to e.g., print a prompt. */ +extern void interp_pre_command_loop (struct interp *interp); + /* well-known interpreters */ #define INTERP_CONSOLE "console" #define INTERP_MI1 "mi1"