Change all_root_varobjs to take a function_view
authorTom Tromey <tom@tromey.com>
Fri, 11 Dec 2020 16:33:36 +0000 (09:33 -0700)
committerTom Tromey <tom@tromey.com>
Fri, 11 Dec 2020 16:33:37 +0000 (09:33 -0700)
This changes all_root_varobjs to take a function_view.  This
simplifies some of the callers, in particular we can remove a data
type that only existed to be passed through.

gdb/ChangeLog
2020-12-11  Tom Tromey  <tom@tromey.com>

* varobj.h (all_root_varobjs): Take a function_view.
* varobj.c (all_root_varobjs): Take a function_view.
(varobj_invalidate_iter): Remove unused parameter.
(varobj_invalidate): Update.
* mi/mi-cmd-var.c (struct mi_cmd_var_update): Remove.
(mi_cmd_var_update_iter): Change parameters.

gdb/ChangeLog
gdb/mi/mi-cmd-var.c
gdb/varobj.c
gdb/varobj.h

index 360dddea5bf8f8110832c2e38cc5a8ba84894cae..d724e742f887d300f56b78ff4bd463ad9b588a23 100644 (file)
@@ -1,3 +1,12 @@
+2020-12-11  Tom Tromey  <tom@tromey.com>
+
+       * varobj.h (all_root_varobjs): Take a function_view.
+       * varobj.c (all_root_varobjs): Take a function_view.
+       (varobj_invalidate_iter): Remove unused parameter.
+       (varobj_invalidate): Update.
+       * mi/mi-cmd-var.c (struct mi_cmd_var_update): Remove.
+       (mi_cmd_var_update_iter): Change parameters.
+
 2020-12-11  Tom Tromey  <tom@tromey.com>
 
        * varobj.c (struct varobj_root) <next>: Remove.
index 178eeec8e7d97796aeee4107d910c694adfa1c58..752d89ad434212a772ee8a50b1e680bd686a4efd 100644 (file)
@@ -585,20 +585,12 @@ mi_cmd_var_assign (const char *command, char **argv, int argc)
   uiout->field_string ("value", val.c_str ());
 }
 
-/* Type used for parameters passing to mi_cmd_var_update_iter.  */
-
-struct mi_cmd_var_update
-  {
-    int only_floating;
-    enum print_values print_values;
-  };
-
 /* Helper for mi_cmd_var_update - update each VAR.  */
 
 static void
-mi_cmd_var_update_iter (struct varobj *var, void *data_pointer)
+mi_cmd_var_update_iter (struct varobj *var, bool only_floating,
+                       enum print_values print_values)
 {
-  struct mi_cmd_var_update *data = (struct mi_cmd_var_update *) data_pointer;
   bool thread_stopped;
 
   int thread_id = varobj_get_thread_id (var);
@@ -617,8 +609,8 @@ mi_cmd_var_update_iter (struct varobj *var, void *data_pointer)
     }
 
   if (thread_stopped
-      && (!data->only_floating || varobj_floating_p (var)))
-    varobj_update_one (var, data->print_values, false /* implicit */);
+      && (!only_floating || varobj_floating_p (var)))
+    varobj_update_one (var, print_values, false /* implicit */);
 }
 
 void
@@ -656,16 +648,14 @@ mi_cmd_var_update (const char *command, char **argv, int argc)
 
   if ((*name == '*' || *name == '@') && (*(name + 1) == '\0'))
     {
-      struct mi_cmd_var_update data;
-
-      data.only_floating = (*name == '@');
-      data.print_values = print_values;
-
       /* varobj_update_one automatically updates all the children of
         VAROBJ.  Therefore update each VAROBJ only once by iterating
         only the root VAROBJs.  */
 
-      all_root_varobjs (mi_cmd_var_update_iter, &data);
+      all_root_varobjs ([=] (varobj *var)
+        {
+         mi_cmd_var_update_iter (var, *name == '0', print_values);
+       });
     }
   else
     {
index 7124e2585ba1c0b0c5d2319863280b3fa239bd3a..e4d640f9d611c94f2d2f601c2683d2cc1f8a5f29 100644 (file)
@@ -2357,11 +2357,11 @@ varobj_default_value_is_changeable_p (const struct varobj *var)
   return r;
 }
 
-/* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them
-   with an arbitrary caller supplied DATA pointer.  */
+/* Iterate all the existing _root_ VAROBJs and call the FUNC callback
+   for each one.  */
 
 void
-all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
+all_root_varobjs (gdb::function_view<void (struct varobj *var)> func)
 {
   /* Iterate "safely" - handle if the callee deletes its passed VAROBJ.  */
   auto iter = rootlist.begin ();
@@ -2369,7 +2369,7 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
   while (iter != end)
     {
       auto self = iter++;
-      (*func) ((*self)->rootvar, data);
+      func ((*self)->rootvar);
     }
 }
 
@@ -2381,7 +2381,7 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
    varobj must be either re-evaluated, or marked as invalid here.  */
 
 static void
-varobj_invalidate_iter (struct varobj *var, void *unused)
+varobj_invalidate_iter (struct varobj *var)
 {
   /* global and floating var must be re-evaluated.  */
   if (var->root->floating || var->root->valid_block == NULL)
@@ -2412,7 +2412,7 @@ varobj_invalidate_iter (struct varobj *var, void *unused)
 void 
 varobj_invalidate (void)
 {
-  all_root_varobjs (varobj_invalidate_iter, NULL);
+  all_root_varobjs (varobj_invalidate_iter);
 }
 
 /* A hash function for a varobj.  */
index 7831e76b9736f8a513c224f4a4c979545a90b452..abf333664afb6d8233792e75bc05e786db046311 100644 (file)
@@ -309,8 +309,7 @@ extern std::string varobj_get_value (struct varobj *var);
 
 extern bool varobj_set_value (struct varobj *var, const char *expression);
 
-extern void all_root_varobjs (void (*func) (struct varobj *var, void *data),
-                             void *data);
+extern void all_root_varobjs (gdb::function_view<void (struct varobj *var)>);
 
 extern std::vector<varobj_update_result>
   varobj_update (struct varobj **varp, bool is_explicit);