*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / interps.c
index 551f416bb0fc4c1161da35ae9a5da26423c56104..53616b636153720fbdc9e603b7d1edf3ef32ed7c 100644 (file)
@@ -1,6 +1,6 @@
 /* Manages interpreters for GDB, the GNU debugger.
 
-   Copyright 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2003, 2007 Free Software Foundation, Inc.
 
    Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
 
@@ -18,8 +18,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA. */
 
 /* This is just a first cut at separating out the "interpreter"
    functions of gdb into self-contained modules.  There are a couple
@@ -42,6 +42,7 @@
 #include "gdb-events.h"
 #include "gdb_assert.h"
 #include "top.h"               /* For command_loop.  */
+#include "exceptions.h"
 
 struct interp
 {
@@ -143,7 +144,7 @@ interp_set (struct interp *interp)
          && !current_interpreter->procs->suspend_proc (current_interpreter->
                                                        data))
        {
-         error ("Could not suspend interpreter \"%s\"\n",
+         error (_("Could not suspend interpreter \"%s\"."),
                 current_interpreter->name);
        }
     }
@@ -177,15 +178,15 @@ interp_set (struct interp *interp)
       interp->inited = 1;
     }
 
-  /* Clear out any installed interpreter hooks/event handlers. */
+  /* Clear out any installed interpreter hooks/event handlers.  */
   clear_interpreter_hooks ();
 
   if (interp->procs->resume_proc != NULL
       && (!interp->procs->resume_proc (interp->data)))
     {
-      if (!interp_set (old_interp))
+      if (old_interp == NULL || !interp_set (old_interp))
        internal_error (__FILE__, __LINE__,
-                       "Failed to initialize new interp \"%s\" %s",
+                       _("Failed to initialize new interp \"%s\" %s"),
                        interp->name, "and could not restore old interp!\n");
       return 0;
     }
@@ -268,15 +269,15 @@ void
 current_interp_command_loop (void)
 {
   /* Somewhat messy.  For the moment prop up all the old ways of
-     selecting the command loop.  `command_loop_hook' should be
-     deprecated.  */
-  if (command_loop_hook != NULL)
-    command_loop_hook ();
+     selecting the command loop.  `deprecated_command_loop_hook'
+     should be deprecated.  */
+  if (deprecated_command_loop_hook != NULL)
+    deprecated_command_loop_hook ();
   else if (current_interpreter != NULL
           && current_interpreter->procs->command_loop_proc != NULL)
     current_interpreter->procs->command_loop_proc (current_interpreter->data);
   else
-    command_loop ();
+    cli_command_loop ();
 }
 
 int
@@ -288,7 +289,7 @@ interp_quiet_p (struct interp *interp)
     return current_interpreter->quiet_p;
 }
 
-int
+static int
 interp_set_quiet (struct interp *interp, int quiet)
 {
   int old_val = interp->quiet_p;
@@ -304,50 +305,49 @@ interp_exec_p (struct interp *interp)
   return interp->procs->exec_proc != NULL;
 }
 
-int
+struct gdb_exception
 interp_exec (struct interp *interp, const char *command_str)
 {
   if (interp->procs->exec_proc != NULL)
     {
       return interp->procs->exec_proc (interp->data, command_str);
     }
-  return 0;
+  return exception_none;
 }
 
-/* A convenience routine that nulls out all the
-   common command hooks.  Use it when removing your interpreter in its 
-   suspend proc. */
+/* A convenience routine that nulls out all the common command hooks.
+   Use it when removing your interpreter in its suspend proc.  */
 void
-clear_interpreter_hooks ()
+clear_interpreter_hooks (void)
 {
-  init_ui_hook = 0;
-  print_frame_info_listing_hook = 0;
+  deprecated_init_ui_hook = 0;
+  deprecated_print_frame_info_listing_hook = 0;
   /*print_frame_more_info_hook = 0; */
-  query_hook = 0;
-  warning_hook = 0;
-  create_breakpoint_hook = 0;
-  delete_breakpoint_hook = 0;
-  modify_breakpoint_hook = 0;
-  interactive_hook = 0;
-  registers_changed_hook = 0;
-  readline_begin_hook = 0;
-  readline_hook = 0;
-  readline_end_hook = 0;
-  register_changed_hook = 0;
-  memory_changed_hook = 0;
-  context_hook = 0;
-  target_wait_hook = 0;
-  call_command_hook = 0;
-  error_hook = 0;
-  error_begin_hook = 0;
-  command_loop_hook = 0;
+  deprecated_query_hook = 0;
+  deprecated_warning_hook = 0;
+  deprecated_create_breakpoint_hook = 0;
+  deprecated_delete_breakpoint_hook = 0;
+  deprecated_modify_breakpoint_hook = 0;
+  deprecated_interactive_hook = 0;
+  deprecated_registers_changed_hook = 0;
+  deprecated_readline_begin_hook = 0;
+  deprecated_readline_hook = 0;
+  deprecated_readline_end_hook = 0;
+  deprecated_register_changed_hook = 0;
+  deprecated_memory_changed_hook = 0;
+  deprecated_context_hook = 0;
+  deprecated_target_wait_hook = 0;
+  deprecated_call_command_hook = 0;
+  deprecated_error_hook = 0;
+  deprecated_error_begin_hook = 0;
+  deprecated_command_loop_hook = 0;
   clear_gdb_event_hooks ();
 }
 
-/* This is a lazy init routine, called the first time
-   the interpreter module is used.  I put it here just in case, but I haven't
-   thought of a use for it yet.  I will probably bag it soon, since I don't
-   think it will be necessary. */
+/* This is a lazy init routine, called the first time the interpreter
+   module is used.  I put it here just in case, but I haven't thought
+   of a use for it yet.  I will probably bag it soon, since I don't
+   think it will be necessary.  */
 static void
 initialize_interps (void)
 {
@@ -355,7 +355,7 @@ initialize_interps (void)
   /* Don't know if anything needs to be done here... */
 }
 
-void
+static void
 interpreter_exec_cmd (char *args, int from_tty)
 {
   struct interp *old_interp, *interp_to_use;
@@ -368,7 +368,7 @@ interpreter_exec_cmd (char *args, int from_tty)
   prules = buildargv (args);
   if (prules == NULL)
     {
-      error ("unable to parse arguments");
+      error (_("unable to parse arguments"));
     }
 
   nrules = 0;
@@ -381,29 +381,30 @@ interpreter_exec_cmd (char *args, int from_tty)
     }
 
   if (nrules < 2)
-    error ("usage: interpreter-exec <interpreter> [ <command> ... ]");
+    error (_("usage: interpreter-exec <interpreter> [ <command> ... ]"));
 
   old_interp = current_interpreter;
 
   interp_to_use = interp_lookup (prules[0]);
   if (interp_to_use == NULL)
-    error ("Could not find interpreter \"%s\".", prules[0]);
+    error (_("Could not find interpreter \"%s\"."), prules[0]);
 
   /* Temporarily set interpreters quiet */
   old_quiet = interp_set_quiet (old_interp, 1);
   use_quiet = interp_set_quiet (interp_to_use, 1);
 
   if (!interp_set (interp_to_use))
-    error ("Could not switch to interpreter \"%s\".", prules[0]);
+    error (_("Could not switch to interpreter \"%s\"."), prules[0]);
 
   for (i = 1; i < nrules; i++)
     {
-      if (!interp_exec (interp_to_use, prules[i]))
+      struct gdb_exception e = interp_exec (interp_to_use, prules[i]);
+      if (e.reason < 0)
        {
          interp_set (old_interp);
-         interp_set_quiet (interp_to_use, old_quiet);
-         error ("error in command: \"%s\".", prules[i]);
-         break;
+         interp_set_quiet (interp_to_use, use_quiet);
+         interp_set_quiet (old_interp, old_quiet);
+         error (_("error in command: \"%s\"."), prules[i]);
        }
     }
 
@@ -423,10 +424,11 @@ interpreter_completer (char *text, char *word)
   struct interp *interp;
 
   /* We expect only a very limited number of interpreters, so just
-     allocate room for all of them. */
+     allocate room for all of them plus one for the last that must be NULL
+     to correctly end the list. */
   for (interp = interp_list; interp != NULL; interp = interp->next)
     ++alloced;
-  matches = (char **) xmalloc (alloced * sizeof (char *));
+  matches = (char **) xcalloc (alloced + 1, sizeof (char *));
 
   num_matches = 0;
   textlen = strlen (text);
@@ -459,12 +461,6 @@ interpreter_completer (char *text, char *word)
       xfree (matches);
       matches = NULL;
     }
-  else if (num_matches < alloced)
-    {
-      matches = (char **) xrealloc ((char *) matches, ((num_matches + 1)
-                                                      * sizeof (char *)));
-      matches[num_matches] = NULL;
-    }
 
   return matches;
 }
@@ -476,9 +472,9 @@ _initialize_interpreter (void)
   struct cmd_list_element *c;
 
   c = add_cmd ("interpreter-exec", class_support,
-              interpreter_exec_cmd,
-              "Execute a command in an interpreter.  It takes two arguments:\n\
+              interpreter_exec_cmd, _("\
+Execute a command in an interpreter.  It takes two arguments:\n\
 The first argument is the name of the interpreter to use.\n\
-The second argument is the command to execute.\n", &cmdlist);
+The second argument is the command to execute.\n"), &cmdlist);
   set_cmd_completer (c, interpreter_completer);
 }
This page took 0.029805 seconds and 4 git commands to generate.