Remove ALL_PSPACE_OBJFILES
[deliverable/binutils-gdb.git] / gdb / guile / scm-param.c
index 23bc86921ce777927b817a951ebae7d23ab38156..69bc97eddc710b71eda3ed0b73aa2dce9c0753da 100644 (file)
@@ -1,6 +1,6 @@
 /* GDB parameters implemented in Guile.
 
-   Copyright (C) 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -251,10 +251,10 @@ pascm_signal_setshow_error (SCM exception, const char *msg)
      itself.  */
   if (gdbscm_user_error_p (gdbscm_exception_key (exception)))
     {
-      char *excp_text = gdbscm_exception_message_to_string (exception);
+      gdb::unique_xmalloc_ptr<char> excp_text
+       = gdbscm_exception_message_to_string (exception);
 
-      make_cleanup (xfree, excp_text);
-      error ("%s", excp_text);
+      error ("%s", excp_text.get ());
     }
   else
     {
@@ -269,12 +269,10 @@ pascm_signal_setshow_error (SCM exception, const char *msg)
    Note: ARGS is always passed as NULL.  */
 
 static void
-pascm_set_func (char *args, int from_tty, struct cmd_list_element *c)
+pascm_set_func (const char *args, int from_tty, struct cmd_list_element *c)
 {
   param_smob *p_smob = (param_smob *) get_cmd_context (c);
   SCM self, result, exception;
-  char *msg;
-  struct cleanup *cleanups;
 
   gdb_assert (gdbscm_is_procedure (p_smob->set_func));
 
@@ -291,18 +289,17 @@ pascm_set_func (char *args, int from_tty, struct cmd_list_element *c)
   if (!scm_is_string (result))
     error (_("Result of %s set-func is not a string."), p_smob->name);
 
-  msg = gdbscm_scm_to_host_string (result, NULL, &exception);
+  gdb::unique_xmalloc_ptr<char> msg = gdbscm_scm_to_host_string (result, NULL,
+                                                                &exception);
   if (msg == NULL)
     {
       gdbscm_print_gdb_exception (SCM_BOOL_F, exception);
       error (_("Error converting show text to host string."));
     }
 
-  cleanups = make_cleanup (xfree, msg);
   /* GDB is usually silent when a parameter is set.  */
-  if (*msg != '\0')
-    fprintf_filtered (gdb_stdout, "%s\n", msg);
-  do_cleanups (cleanups);
+  if (*msg.get () != '\0')
+    fprintf_filtered (gdb_stdout, "%s\n", msg.get ());
 }
 
 /* A callback function that is registered against the respective
@@ -316,8 +313,6 @@ pascm_show_func (struct ui_file *file, int from_tty,
 {
   param_smob *p_smob = (param_smob *) get_cmd_context (c);
   SCM value_scm, self, result, exception;
-  char *msg;
-  struct cleanup *cleanups;
 
   gdb_assert (gdbscm_is_procedure (p_smob->show_func));
 
@@ -338,16 +333,15 @@ pascm_show_func (struct ui_file *file, int from_tty,
                                  _("Error occurred showing parameter."));
     }
 
-  msg = gdbscm_scm_to_host_string (result, NULL, &exception);
+  gdb::unique_xmalloc_ptr<char> msg = gdbscm_scm_to_host_string (result, NULL,
+                                                                &exception);
   if (msg == NULL)
     {
       gdbscm_print_gdb_exception (SCM_BOOL_F, exception);
       error (_("Error converting show text to host string."));
     }
 
-  cleanups = make_cleanup (xfree, msg);
-  fprintf_filtered (file, "%s\n", msg);
-  do_cleanups (cleanups);
+  fprintf_filtered (file, "%s\n", msg.get ());
 }
 
 /* A helper function that dispatches to the appropriate add_setshow
@@ -357,7 +351,7 @@ static void
 add_setshow_generic (enum var_types param_type, enum command_class cmd_class,
                     char *cmd_name, param_smob *self,
                     char *set_doc, char *show_doc, char *help_doc,
-                    cmd_sfunc_ftype *set_func,
+                    cmd_const_sfunc_ftype *set_func,
                     show_value_ftype *show_func,
                     struct cmd_list_element **set_list,
                     struct cmd_list_element **show_list,
@@ -503,8 +497,7 @@ compute_enum_list (SCM enum_values_scm, int arg_pos, const char *func_name)
                                 _("enumeration list is empty"));
     }
 
-  enum_values = xmalloc ((size + 1) * sizeof (char *));
-  memset (enum_values, 0, (size + 1) * sizeof (char *));
+  enum_values = XCNEWVEC (char *, size + 1);
 
   i = 0;
   while (!scm_is_eq (enum_values_scm, SCM_EOL))
@@ -517,7 +510,8 @@ compute_enum_list (SCM enum_values_scm, int arg_pos, const char *func_name)
          freeargv (enum_values);
          SCM_ASSERT_TYPE (0, value, arg_pos, func_name, _("string"));
        }
-      enum_values[i] = gdbscm_scm_to_host_string (value, NULL, &exception);
+      enum_values[i] = gdbscm_scm_to_host_string (value, NULL,
+                                                 &exception).release ();
       if (enum_values[i] == NULL)
        {
          freeargv (enum_values);
@@ -603,7 +597,7 @@ pascm_param_value (enum var_types type, void *var,
     case var_filename:
     case var_enum:
       {
-       char *str = * (char **) var;
+       const char *str = *(char **) var;
 
        if (str == NULL)
          str = "";
@@ -684,34 +678,33 @@ pascm_set_param_value_x (enum var_types type, union pascm_variable *var,
        }
       else
        {
-         char *string;
          SCM exception;
 
-         string = gdbscm_scm_to_host_string (value, NULL, &exception);
+         gdb::unique_xmalloc_ptr<char> string
+           = gdbscm_scm_to_host_string (value, NULL, &exception);
          if (string == NULL)
            gdbscm_throw (exception);
          xfree (var->stringval);
-         var->stringval = string;
+         var->stringval = string.release ();
        }
       break;
 
     case var_enum:
       {
        int i;
-       char *str;
        SCM exception;
 
        SCM_ASSERT_TYPE (scm_is_string (value), value, arg_pos, func_name,
                       _("string"));
-       str = gdbscm_scm_to_host_string (value, NULL, &exception);
+       gdb::unique_xmalloc_ptr<char> str
+         = gdbscm_scm_to_host_string (value, NULL, &exception);
        if (str == NULL)
          gdbscm_throw (exception);
        for (i = 0; enumeration[i]; ++i)
          {
-           if (strcmp (enumeration[i], str) == 0)
+           if (strcmp (enumeration[i], str.get ()) == 0)
              break;
          }
-       xfree (str);
        if (enumeration[i] == NULL)
          {
            gdbscm_out_of_range_error (func_name, arg_pos, value,
@@ -939,7 +932,7 @@ gdbscm_make_parameter (SCM name_scm, SCM rest)
   /* These are all stored in GC space so that we don't have to worry about
      freeing them if we throw an exception.  */
   p_smob->name = name;
-  p_smob->cmd_class = cmd_class;
+  p_smob->cmd_class = (enum command_class) cmd_class;
   p_smob->type = (enum var_types) param_type;
   p_smob->doc = doc;
   p_smob->set_doc = set_doc;
@@ -957,7 +950,7 @@ gdbscm_make_parameter (SCM name_scm, SCM rest)
          if (gdbscm_is_exception (initial_value_scm))
            gdbscm_throw (initial_value_scm);
        }
-      pascm_set_param_value_x (param_type, &p_smob->value, enum_list,
+      pascm_set_param_value_x (p_smob->type, &p_smob->value, enum_list,
                               initial_value_scm,
                               initial_value_arg_pos, FUNC_NAME);
     }
@@ -990,7 +983,6 @@ gdbscm_register_parameter_x (SCM self)
     = pascm_get_param_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
   char *cmd_name;
   struct cmd_list_element **set_list, **show_list;
-  volatile struct gdb_exception except;
 
   if (pascm_is_valid (p_smob))
     scm_misc_error (FUNC_NAME, _("parameter is already registered"), SCM_EOL);
@@ -1014,7 +1006,7 @@ gdbscm_register_parameter_x (SCM self)
                _("parameter exists, \"show\" command is already defined"));
     }
 
-  TRY_CATCH (except, RETURN_MASK_ALL)
+  TRY
     {
       add_setshow_generic (p_smob->type, p_smob->cmd_class,
                           p_smob->cmd_name, p_smob,
@@ -1026,7 +1018,11 @@ gdbscm_register_parameter_x (SCM self)
                           set_list, show_list,
                           &p_smob->set_command, &p_smob->show_command);
     }
-  GDBSCM_HANDLE_GDB_EXCEPTION (except);
+  CATCH (except, RETURN_MASK_ALL)
+    {
+      GDBSCM_HANDLE_GDB_EXCEPTION (except);
+    }
+  END_CATCH
 
   /* Note: At this point the parameter exists in gdb.
      So no more errors after this point.  */
@@ -1057,23 +1053,27 @@ gdbscm_parameter_value (SCM self)
     }
   else
     {
-      char *name;
       SCM except_scm;
       struct cmd_list_element *alias, *prefix, *cmd;
-      const char *arg;
       char *newarg;
       int found = -1;
-      volatile struct gdb_exception except;
+      struct gdb_exception except = exception_none;
 
-      name = gdbscm_scm_to_host_string (self, NULL, &except_scm);
+      gdb::unique_xmalloc_ptr<char> name
+       = gdbscm_scm_to_host_string (self, NULL, &except_scm);
       if (name == NULL)
        gdbscm_throw (except_scm);
-      newarg = concat ("show ", name, (char *) NULL);
-      TRY_CATCH (except, RETURN_MASK_ALL)
+      newarg = concat ("show ", name.get (), (char *) NULL);
+      TRY
        {
          found = lookup_cmd_composition (newarg, &alias, &prefix, &cmd);
        }
-      xfree (name);
+      CATCH (ex, RETURN_MASK_ALL)
+       {
+         except = ex;
+       }
+      END_CATCH
+
       xfree (newarg);
       GDBSCM_HANDLE_GDB_EXCEPTION (except);
       if (!found)
@@ -1109,7 +1109,7 @@ gdbscm_set_parameter_value_x (SCM self, SCM value)
 
 static const scheme_function parameter_functions[] =
 {
-  { "make-parameter", 1, 0, 1, gdbscm_make_parameter,
+  { "make-parameter", 1, 0, 1, as_a_scm_t_subr (gdbscm_make_parameter),
     "\
 Make a GDB parameter object.\n\
 \n\
@@ -1141,20 +1141,22 @@ Make a GDB parameter object.\n\
     show-doc: The \"doc string\" when showing the parameter.\n\
     initial-value: The initial value of the parameter." },
 
-  { "register-parameter!", 1, 0, 0, gdbscm_register_parameter_x,
+  { "register-parameter!", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_register_parameter_x),
     "\
 Register a <gdb:parameter> object with GDB." },
 
-  { "parameter?", 1, 0, 0, gdbscm_parameter_p,
+  { "parameter?", 1, 0, 0, as_a_scm_t_subr (gdbscm_parameter_p),
     "\
 Return #t if the object is a <gdb:parameter> object." },
 
-  { "parameter-value", 1, 0, 0, gdbscm_parameter_value,
+  { "parameter-value", 1, 0, 0, as_a_scm_t_subr (gdbscm_parameter_value),
     "\
 Return the value of a <gdb:parameter> object\n\
 or any gdb parameter if param is a string naming the parameter." },
 
-  { "set-parameter-value!", 2, 0, 0, gdbscm_set_parameter_value_x,
+  { "set-parameter-value!", 2, 0, 0,
+    as_a_scm_t_subr (gdbscm_set_parameter_value_x),
     "\
 Set the value of a <gdb:parameter> object.\n\
 \n\
This page took 0.030917 seconds and 4 git commands to generate.