[PATCH 4/4] gdb/guile: use return values of add_setshow functions in add_setshow_generic

Simon Marchi simon.marchi@polymtl.ca
Fri Jun 25 20:03:22 GMT 2021


Use the set_show_commands objects returned by the add_setshow functions
in add_setshow_generic.  This lets us avoid looking up the commands
after creating them, instead using the return objects directly.

Make add_setshow_generic return a set_show_commands object, which is a
bit nicer than returning both commands by parameter.

Finally, store using that object in param_smob.

Equivalent of 7bd22f56a3cf ("gdb/python: use return values of
add_setshow functions in add_setshow_generic"), but for guile.

gdb/ChangeLog:

	* guile/scm-param.c (struct param_smob) <set_command,
	show_command>: Remove.
	<commands>: New.
	(pascm_is_valid): Adjust.
	(add_setshow_generic): Use return values of add_setshow
	functions, return a set_show_commands.
	(gdbscm_register_parameter_x): Adjust.

Change-Id: I18ed9e7dd5646529491c86749a5cb20763acd1f0
---
 gdb/guile/scm-param.c | 154 ++++++++++++++++++------------------------
 1 file changed, 66 insertions(+), 88 deletions(-)

diff --git a/gdb/guile/scm-param.c b/gdb/guile/scm-param.c
index 86f61057a32f..c052d04974ae 100644
--- a/gdb/guile/scm-param.c
+++ b/gdb/guile/scm-param.c
@@ -89,8 +89,7 @@ struct param_smob
   /* The corresponding gdb command objects.
      These are NULL if the parameter has not been registered yet, or
      is no longer registered.  */
-  struct cmd_list_element *set_command;
-  struct cmd_list_element *show_command;
+  set_show_commands commands;
 
   /* The value of the parameter.  */
   union pascm_variable value;
@@ -232,7 +231,7 @@ pascm_get_param_smob_arg_unsafe (SCM self, int arg_pos, const char *func_name)
 static int
 pascm_is_valid (param_smob *p_smob)
 {
-  return p_smob->set_command != NULL;
+  return p_smob->commands.set != nullptr;
 }
 
 /* A helper function which return the default documentation string for
@@ -350,111 +349,100 @@ pascm_show_func (struct ui_file *file, int from_tty,
 /* A helper function that dispatches to the appropriate add_setshow
    function.  */
 
-static void
+static set_show_commands
 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_const_sfunc_ftype *set_func,
 		     show_value_ftype *show_func,
 		     struct cmd_list_element **set_list,
-		     struct cmd_list_element **show_list,
-		     struct cmd_list_element **set_cmd,
-		     struct cmd_list_element **show_cmd)
+		     struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *param = NULL;
-  const char *tmp_name = NULL;
+  set_show_commands commands;
 
   switch (param_type)
     {
     case var_boolean:
-      add_setshow_boolean_cmd (cmd_name, cmd_class,
-			       &self->value.boolval,
-			       set_doc, show_doc, help_doc,
-			       set_func, show_func,
-			       set_list, show_list);
-
+      commands = add_setshow_boolean_cmd (cmd_name, cmd_class,
+					  &self->value.boolval, set_doc,
+					  show_doc, help_doc, set_func,
+					  show_func, set_list, show_list);
       break;
 
     case var_auto_boolean:
-      add_setshow_auto_boolean_cmd (cmd_name, cmd_class,
-				    &self->value.autoboolval,
-				    set_doc, show_doc, help_doc,
-				    set_func, show_func,
-				    set_list, show_list);
+      commands = add_setshow_auto_boolean_cmd (cmd_name, cmd_class,
+					       &self->value.autoboolval,
+					       set_doc, show_doc, help_doc,
+					       set_func, show_func, set_list,
+					       show_list);
       break;
 
     case var_uinteger:
-      add_setshow_uinteger_cmd (cmd_name, cmd_class,
-				&self->value.uintval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_uinteger_cmd (cmd_name, cmd_class,
+					   &self->value.uintval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_zinteger:
-      add_setshow_zinteger_cmd (cmd_name, cmd_class,
-				&self->value.intval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_zinteger_cmd (cmd_name, cmd_class,
+					   &self->value.intval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_zuinteger:
-      add_setshow_zuinteger_cmd (cmd_name, cmd_class,
-				 &self->value.uintval,
-				 set_doc, show_doc, help_doc,
-				 set_func, show_func,
-				 set_list, show_list);
+      commands = add_setshow_zuinteger_cmd (cmd_name, cmd_class,
+					    &self->value.uintval, set_doc,
+					    show_doc, help_doc, set_func,
+					    show_func, set_list, show_list);
       break;
 
     case var_zuinteger_unlimited:
-      add_setshow_zuinteger_unlimited_cmd (cmd_name, cmd_class,
-					   &self->value.intval,
-					   set_doc, show_doc, help_doc,
-					   set_func, show_func,
-					   set_list, show_list);
+      commands = add_setshow_zuinteger_unlimited_cmd (cmd_name, cmd_class,
+						      &self->value.intval,
+						      set_doc, show_doc,
+						      help_doc, set_func,
+						      show_func, set_list,
+						      show_list);
       break;
 
     case var_string:
-      add_setshow_string_cmd (cmd_name, cmd_class,
-			      &self->value.stringval,
-			      set_doc, show_doc, help_doc,
-			      set_func, show_func,
-			      set_list, show_list);
+      commands = add_setshow_string_cmd (cmd_name, cmd_class,
+					 &self->value.stringval, set_doc,
+					 show_doc, help_doc, set_func,
+					 show_func, set_list, show_list);
       break;
 
     case var_string_noescape:
-      add_setshow_string_noescape_cmd (cmd_name, cmd_class,
-				       &self->value.stringval,
-				       set_doc, show_doc, help_doc,
-				       set_func, show_func,
-				       set_list, show_list);
+      commands = add_setshow_string_noescape_cmd (cmd_name, cmd_class,
+						  &self->value.stringval,
+						  set_doc, show_doc, help_doc,
+						  set_func, show_func, set_list,
+						  show_list);
 
       break;
 
     case var_optional_filename:
-      add_setshow_optional_filename_cmd (cmd_name, cmd_class,
-					 &self->value.stringval,
-					 set_doc, show_doc, help_doc,
-					 set_func, show_func,
-					 set_list, show_list);
+      commands = add_setshow_optional_filename_cmd (cmd_name, cmd_class,
+						    &self->value.stringval,
+						    set_doc, show_doc, help_doc,
+						    set_func, show_func,
+						    set_list, show_list);
       break;
 
     case var_filename:
-      add_setshow_filename_cmd (cmd_name, cmd_class,
-				&self->value.stringval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_filename_cmd (cmd_name, cmd_class,
+					   &self->value.stringval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_enum:
-      add_setshow_enum_cmd (cmd_name, cmd_class,
-			    self->enumeration,
-			    &self->value.cstringval,
-			    set_doc, show_doc, help_doc,
-			    set_func, show_func,
-			    set_list, show_list);
+      commands = add_setshow_enum_cmd (cmd_name, cmd_class, self->enumeration,
+				       &self->value.cstringval, set_doc,
+				       show_doc, help_doc, set_func, show_func,
+				       set_list, show_list);
       /* Initialize the value, just in case.  */
       self->value.cstringval = self->enumeration[0];
       break;
@@ -463,19 +451,12 @@ add_setshow_generic (enum var_types param_type, enum command_class cmd_class,
       gdb_assert_not_reached ("bad param_type value");
     }
 
-  /* Lookup created parameter, and register Scheme object against the
-     parameter context.  Perform this task against both lists.  */
-  tmp_name = cmd_name;
-  param = lookup_cmd (&tmp_name, *show_list, "", NULL, 0, 1);
-  gdb_assert (param != NULL);
-  param->set_context (self);
-  *set_cmd = param;
-
-  tmp_name = cmd_name;
-  param = lookup_cmd (&tmp_name, *set_list, "", NULL, 0, 1);
-  gdb_assert (param != NULL);
-  param->set_context (self);
-  *show_cmd = param;
+  /* Register Scheme object against the commandsparameter context.  Perform this
+     task against both lists.  */
+  commands.set->set_context (self);
+  commands.show->set_context (self);
+
+  return commands;
 }
 
 /* Return an array of strings corresponding to the enum values for
@@ -1012,15 +993,12 @@ gdbscm_register_parameter_x (SCM self)
   gdbscm_gdb_exception exc {};
   try
     {
-      add_setshow_generic (p_smob->type, p_smob->cmd_class,
-			   p_smob->cmd_name, p_smob,
-			   p_smob->set_doc, p_smob->show_doc, p_smob->doc,
-			   (gdbscm_is_procedure (p_smob->set_func)
-			    ? pascm_set_func : NULL),
-			   (gdbscm_is_procedure (p_smob->show_func)
-			    ? pascm_show_func : NULL),
-			   set_list, show_list,
-			   &p_smob->set_command, &p_smob->show_command);
+      p_smob->commands = add_setshow_generic
+	(p_smob->type, p_smob->cmd_class, p_smob->cmd_name, p_smob,
+	 p_smob->set_doc, p_smob->show_doc, p_smob->doc,
+	 (gdbscm_is_procedure (p_smob->set_func) ? pascm_set_func : NULL),
+	 (gdbscm_is_procedure (p_smob->show_func) ? pascm_show_func : NULL),
+	 set_list, show_list);
     }
   catch (const gdb_exception &except)
     {
-- 
2.32.0



More information about the Gdb-patches mailing list