This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH: gdb/mi + doco] -var-update


Here is my latest set of patches.

Eli,

I think it addresses your concerns. I have changed -var-list-children to
use --with-values instead of --all-values. In the unlikely event that any other
frontend is using this, "-var-list-children 1 varno" will still be backwardly
compatible.

Andrew,

Is this acceptable or is mi-getopt a pre-condition?


Nick


*** /home/nick/src/gdb/mi/mi-cmd-var.c.~1.21.~	2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmd-var.c	2005-02-27 14:14:36.000000000 +1300
***************
*** 30,35 ****
--- 30,40 ----
  #include <ctype.h>
  #include "gdb_string.h"
  
+ const char novalues[] = "\"--no-values\"";
+ const char withvalues[] = "\"--with-values\"";
+ const char simplevalues[] = "\"--simple-values\"";
+ const char allvalues[] = "\"--all-values\"";
+ 
  extern int varobjdebug;		/* defined in varobj.c */
  
  static int varobj_update_one (struct varobj *var);
***************
*** 262,284 ****
      error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"));
  
    /* Get varobj handle, if a valid var obj name was specified */
!   if (argc == 1) var = varobj_get_handle (argv[0]);
!   else var = varobj_get_handle (argv[1]);
    if (var == NULL)
      error (_("Variable object not found"));
  
    numchild = varobj_list_children (var, &childlist);
    ui_out_field_int (uiout, "numchild", numchild);
    if (argc == 2)
!     if (strcmp (argv[0], "0") == 0
! 	|| strcmp (argv[0], "--no-values") == 0)
!       print_values = PRINT_NO_VALUES;
!     else if (strcmp (argv[0], "1") == 0
! 	     || strcmp (argv[0], "--all-values") == 0)
!       print_values = PRINT_ALL_VALUES;
!     else
!      error (_("Unknown value for PRINT_VALUES: must be: 0 or \"--no-values\", 1 or \"--all-values\""));
!   else print_values = PRINT_NO_VALUES;
  
    if (numchild <= 0)
      return MI_CMD_DONE;
--- 267,295 ----
      error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"));
  
    /* Get varobj handle, if a valid var obj name was specified */
!   if (argc == 1)
!     var = varobj_get_handle (argv[0]);
!   else
!     var = varobj_get_handle (argv[1]);
    if (var == NULL)
      error (_("Variable object not found"));
  
    numchild = varobj_list_children (var, &childlist);
    ui_out_field_int (uiout, "numchild", numchild);
    if (argc == 2)
!     {
!       if (strcmp (argv[0], "0") == 0
! 	  || strcmp (argv[0], "--no-values") == 0)
! 	print_values = PRINT_NO_VALUES;
!       else if (strcmp (argv[0], "1") == 0
! 	       || strcmp (argv[0], "--with-values") == 0)
! 	print_values = PRINT_ALL_VALUES;
!       else
! 	error (_("Unknown value for PRINT_VALUES: must be: 0 or %s, 1 or %s"),
! 	       novalues, withvalues);
!     }
!   else
!     print_values = PRINT_NO_VALUES;
  
    if (numchild <= 0)
      return MI_CMD_DONE;
***************
*** 426,436 ****
    struct cleanup *cleanup;
    char *name;
    int nv;
  
!   if (argc != 1)
!     error (_("mi_cmd_var_update: Usage: NAME."));
  
!   name = argv[0];
  
    /* Check if the parameter is a "*" which means that we want
       to update all variables */
--- 437,466 ----
    struct cleanup *cleanup;
    char *name;
    int nv;
+   enum print_values print_values;
  
!   if (argc != 1 && argc != 2)
!     error (_("mi_cmd_var_update: Usage: [PRINT_VALUES] NAME."));
  
!   if (argc == 1)
!     name = argv[0];
!   else
!     name = (argv[1]);
! 
!   if (argc == 2)
!     {
!       if (strcmp (argv[0], "0") == 0
! 	  || strcmp (argv[0], "--no-values") == 0)
! 	print_values = PRINT_NO_VALUES;
!       else if (strcmp (argv[0], "1") == 0
! 	       || strcmp (argv[0], "--with-values") == 0)
! 	print_values = PRINT_ALL_VALUES;
!       else
! 	error (_("Unknown value for PRINT_VALUES: must be: 0 or %s, 1 or %s"),
! 		 novalues, withvalues);
!     }
!   else
!     print_values = PRINT_NO_VALUES;
  
    /* Check if the parameter is a "*" which means that we want
       to update all variables */
***************
*** 524,529 ****
--- 554,561 ----
  	  if (mi_version (uiout) > 1)
  	    cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
  	  ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
+ 	  if (print_values)
+ 	    ui_out_field_string (uiout, "value", varobj_get_value (*cc));
  	  ui_out_field_string (uiout, "in_scope", "true");
  	  ui_out_field_string (uiout, "type_changed", "false");
  	  if (mi_version (uiout) > 1)


*** /home/nick/src/gdb/mi/mi-cmd-stack.c.~1.25.~	2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmd-stack.c	2005-02-26 19:50:40.000000000 +1300
***************
*** 151,157 ****
  	    || strcmp (argv[0], "--simple-values") == 0)
       print_values = PRINT_SIMPLE_VALUES;
     else
!      error (_("Unknown value for PRINT_VALUES: must be: 0 or \"--no-values\", 1 or \"--all-values\", 2 or \"--simple-values\""));
    list_args_or_locals (1, print_values, frame);
    return MI_CMD_DONE;
  }
--- 151,158 ----
  	    || strcmp (argv[0], "--simple-values") == 0)
       print_values = PRINT_SIMPLE_VALUES;
     else
!      error (_("Unknown value for PRINT_VALUES: must be: 0 or %s, 1 or %s, 2 or %s"),
! 	    novalues, allvalues, simplevalues);
    list_args_or_locals (1, print_values, frame);
    return MI_CMD_DONE;
  }


*** /home/nick/src/gdb/mi/mi-cmds.h.~1.15.~	2005-01-25 22:30:39.000000000 +1300
--- /home/nick/src/gdb/mi/mi-cmds.h	2005-02-26 19:44:02.000000000 +1300
***************
*** 50,55 ****
--- 50,60 ----
     PRINT_SIMPLE_VALUES
  };
  
+ extern const char novalues[];
+ extern const char withvalues[];
+ extern const char simplevalues[];
+ extern const char allvalues[];
+ 
  typedef enum mi_cmd_result (mi_cmd_argv_ftype) (char *command, char **argv, int argc);
  
  /* Older MI commands have this interface. Retained until all old


*** /home/nick/src/gdb/doc/gdb.texinfo.~1.232.~	2005-02-13 00:36:20.000000000 +1300
--- /home/nick/src/gdb/doc/gdb.texinfo	2005-02-26 19:41:39.000000000 +1300
***************
*** 18797,18805 ****
  
  Returns a list of the children of the specified variable object.  With
  just the variable object name as an argument or with an optional
! preceding argument of 0 or @code{--no-values}, prints only the names of the
! variables.  With an optional preceding argument of 1 or @code{--all-values},
! also prints their values.
  
  @subsubheading Example
  
--- 18797,18805 ----
  
  Returns a list of the children of the specified variable object.  With
  just the variable object name as an argument or with an optional
! preceding argument of 0 or @code{--no-values}, prints only the names
! of the variables.  With an optional value for @var{print-values} of 1
! or @code{--with-values}, also prints their values.
  
  @subsubheading Example
  
***************
*** 18921,18933 ****
  @subsubheading Synopsis
  
  @smallexample
!  -var-update @{@var{name} | "*"@}
  @end smallexample
  
  Update the value of the variable object @var{name} by evaluating its
  expression after fetching all the new values from memory or registers.
! A @samp{*} causes all existing variable objects to be updated.
  
  
  @node Annotations
  @chapter @value{GDBN} Annotations
--- 18921,18949 ----
  @subsubheading Synopsis
  
  @smallexample
!  -var-update [@var{print-values}] @{@var{name} | "*"@}
  @end smallexample
  
  Update the value of the variable object @var{name} by evaluating its
  expression after fetching all the new values from memory or registers.
! A @samp{*} causes all existing variable objects to be updated.  With
! just a single argument or with an optional value for
! @var{print-values} of 0 or @code{--no-values}, prints only the names
! of the variables.  A value for @var{print-values} of 1 or
! @code{--with-values}, also prints their values.
  
+ @subsubheading Example
+ 
+ @smallexample
+ (@value{GDBP})
+ -var-assign var1 3
+ ^done,value="3"
+ (@value{GDBP})
+ -var-update --all-values var1
+ ^done,changelist=[@{name="var1",value="3",in_scope="true",
+ type_changed="false"@}]
+ (@value{GDBP})
+ @end smallexample
  
  @node Annotations
  @chapter @value{GDBN} Annotations


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]