Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Andrew Burgess" <aburgess@broadcom.com>
To: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: [PATCH] Give every interpreter a command_loop_proc.
Date: Thu, 05 Sep 2013 17:00:00 -0000	[thread overview]
Message-ID: <5228B883.2010602@broadcom.com> (raw)

This patch simplifies gdb/interps.c:current_interp_command_loop
by giving every interpreter a command_loop_proc.

Of the 4 interpreters I'm aware of mi and gdbtk already install
a command loop proc, while cli and tui don't instead using
fall-through code in current_interp_command_loop.

I've given cli and tui a command loop proc, and removed the
fall-through code.

This change does rely on "current_interpreter" never being NULL,
I believe this is true, and no tests failed here (x86-64 linux),
but if anyone know different please let me know.

OK to apply?

Thanks,
Andrew


2013-09-05  Andrew Burgess  <aburgess@broadcom.com>

	* gdb/cli/cli-interp.c (_initialize_cli_interp): Add a
	command_loop_proc to interp_procs.
	* gdb/event-top.c (cli_command_loop): Change signature to match
	interp_command_loop_ftype.
	* gdb/event-top.h (cli_command_loop): Same.
	* gdb/interps.c (interp_new): Require every interpreter to have a
	command_loop_proc.
	(current_interp_command_loop): Just call the command_loop_proc on
	the current interpreter.
	* gdb/tui/tui-interp.c (_initialize_tui_interp): Add a
	command_loop_proc to interp_procs.

diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index 1003cc7..ac3d9a8 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -151,7 +151,9 @@ _initialize_cli_interp (void)
     cli_interpreter_suspend,	/* suspend_proc */
     cli_interpreter_exec,	/* exec_proc */
     cli_interpreter_display_prompt_p,	/* prompt_proc_p */
-    cli_ui_out			/* ui_out_proc */
+    cli_ui_out,			/* ui_out_proc */
+    NULL,                       /* set_logging_proc */
+    cli_command_loop            /* command_loop_proc */
   };
   struct interp *cli_interp;
 
diff --git a/gdb/event-top.c b/gdb/event-top.c
index f1d55b3..1f2e6fb 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -167,9 +167,11 @@ rl_callback_read_char_wrapper (gdb_client_data client_data)
 }
 
 /* Initialize all the necessary variables, start the event loop,
-   register readline, and stdin, start the loop.  */
+   register readline, and stdin, start the loop.  The DATA is the
+   interpreter data cookie, ignored for now.  */
+
 void
-cli_command_loop (void)
+cli_command_loop (void *data)
 {
   display_gdb_prompt (0);
 
diff --git a/gdb/event-top.h b/gdb/event-top.h
index e6166f6..97142d4 100644
--- a/gdb/event-top.h
+++ b/gdb/event-top.h
@@ -62,6 +62,6 @@ extern void (*input_handler) (char *);
 extern int input_fd;
 extern void (*after_char_processing_hook) (void);
 
-extern void cli_command_loop (void);
+extern void cli_command_loop (void *);
 
 #endif
diff --git a/gdb/interps.c b/gdb/interps.c
index 33e0f72..7f19385 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -101,6 +101,9 @@ interp_new (const char *name, const struct interp_procs *procs)
   new_interp->procs = procs;
   new_interp->inited = 0;
 
+  /* Check for required procs.  */
+  gdb_assert (procs->command_loop_proc != NULL);
+
   return new_interp;
 }
 
@@ -319,13 +322,9 @@ current_interp_display_prompt_p (void)
 void
 current_interp_command_loop (void)
 {
-  /* Somewhat messy.  For the moment prop up all the old ways of
-     selecting the command loop.  */
-  if (current_interpreter != NULL
-      && current_interpreter->procs->command_loop_proc != NULL)
-    current_interpreter->procs->command_loop_proc (current_interpreter->data);
-  else
-    cli_command_loop ();
+  gdb_assert (current_interpreter != NULL);
+
+  current_interpreter->procs->command_loop_proc (current_interpreter->data);
 }
 
 int
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index 42526e6..1095220 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -153,6 +153,8 @@ _initialize_tui_interp (void)
     tui_exec,
     tui_display_prompt_p,
     tui_ui_out,
+    NULL,
+    cli_command_loop
   };
   struct interp *tui_interp;
 


             reply	other threads:[~2013-09-05 17:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-05 17:00 Andrew Burgess [this message]
2013-09-05 17:13 ` Pedro Alves
2013-09-06  8:56   ` Andrew Burgess
2013-09-05 17:14 ` Stan Shebs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5228B883.2010602@broadcom.com \
    --to=aburgess@broadcom.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox