2006-07-29 Vladimir Prus <vladimir@codesourcery.com>
authorVladimir Prus <vladimir@codesourcery.com>
Wed, 29 Nov 2006 15:40:59 +0000 (15:40 +0000)
committerVladimir Prus <vladimir@codesourcery.com>
Wed, 29 Nov 2006 15:40:59 +0000 (15:40 +0000)
* mi/mi-cmd-var.c (print_varobj): New function.
(mi_cmd_var_create): Use the above.
(mi_cmd_var_list_children): Likewise.

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

index fb6fe4d..6492a9b 100644 (file)
@@ -1,4 +1,10 @@
 2006-07-29  Vladimir Prus  <vladimir@codesourcery.com>
+       
+       * mi/mi-cmd-var.c (print_varobj): New function.
+       (mi_cmd_var_create): Use the above.
+       (mi_cmd_var_list_children): Likewise.
+
+2006-07-29  Vladimir Prus  <vladimir@codesourcery.com>
 
        * MAINTAINERS (Write After Approval): Add myself.
 
index 92351c4..ce6e707 100644 (file)
@@ -39,6 +39,33 @@ extern int varobjdebug;              /* defined in varobj.c */
 static int varobj_update_one (struct varobj *var,
                              enum print_values print_values);
 
+static int mi_print_value_p (struct type *type, enum print_values print_values);
+
+/* Print variable object VAR.  The PRINT_VALUES parameter controls
+   if the value should be printed.  The PRINT_EXPRESSION parameter
+   controls if the expression should be printed.  */
+static void 
+print_varobj (struct varobj *var, enum print_values print_values,
+             int print_expression)
+{
+  char *type;
+
+  ui_out_field_string (uiout, "name", varobj_get_objname (var));
+  if (print_expression)
+    ui_out_field_string (uiout, "exp", varobj_get_expression (var));
+  ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
+  
+  if (mi_print_value_p (varobj_get_gdb_type (var), print_values))
+    ui_out_field_string (uiout, "value", varobj_get_value (var));
+
+  type = varobj_get_type (var);
+  if (type != NULL)
+    {
+      ui_out_field_string (uiout, "type", type);
+      xfree (type);
+    }
+}
+
 /* VAROBJ operations */
 
 enum mi_cmd_result
@@ -49,7 +76,6 @@ mi_cmd_var_create (char *command, char **argv, int argc)
   char *name;
   char *frame;
   char *expr;
-  char *type;
   struct cleanup *old_cleanups;
   enum varobj_type var_type;
 
@@ -99,16 +125,7 @@ mi_cmd_var_create (char *command, char **argv, int argc)
   if (var == NULL)
     error (_("mi_cmd_var_create: unable to create variable object"));
 
-  ui_out_field_string (uiout, "name", name);
-  ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
-  type = varobj_get_type (var);
-  if (type == NULL)
-    ui_out_field_string (uiout, "type", "");
-  else
-    {
-      ui_out_field_string (uiout, "type", type);
-      xfree (type);
-    }
+  print_varobj (var, PRINT_NO_VALUES, 0 /* don't print expression */);
 
   do_cleanups (old_cleanups);
   return MI_CMD_DONE;
@@ -337,17 +354,9 @@ mi_cmd_var_list_children (char *command, char **argv, int argc)
     {
       struct cleanup *cleanup_child;
       cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child");
-      ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
-      ui_out_field_string (uiout, "exp", varobj_get_expression (*cc));
-      ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc));
-      if (mi_print_value_p (varobj_get_gdb_type (*cc), print_values))
-       ui_out_field_string (uiout, "value", varobj_get_value (*cc));
-      type = varobj_get_type (*cc);
-      /* C++ pseudo-variables (public, private, protected) do not have a type */
-      if (type)
-       ui_out_field_string (uiout, "type", type);
-      do_cleanups (cleanup_child);
+      print_varobj (*cc, print_values, 1 /* print expression */);
       cc++;
+      do_cleanups (cleanup_child);
     }
   do_cleanups (cleanup_children);
   xfree (childlist);