]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/mi/mi-cmd-var.c
Updated copyright notices for most files.
[thirdparty/binutils-gdb.git] / gdb / mi / mi-cmd-var.c
index 05fe7a923ba8516d3a66e3402fcb4f439480b31a..2b5cd6d0cc3be6827b1da6b6bf4d6c8b1e4590ef 100644 (file)
@@ -1,6 +1,7 @@
 /* MI Command Set - varobj commands.
 
-   Copyright (C) 2000, 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2004, 2005, 2007, 2008
+   Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions (a Red Hat company).
 
@@ -55,8 +56,7 @@ print_varobj (struct varobj *var, enum print_values print_values,
     ui_out_field_string (uiout, "exp", varobj_get_expression (var));
   ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
   
-  gdb_type = varobj_get_gdb_type (var);
-  if (gdb_type && mi_print_value_p (gdb_type, print_values))
+  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);
@@ -327,7 +327,6 @@ Must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s\""),
 static int
 mi_print_value_p (struct type *type, enum print_values print_values)
 {
-  type = check_typedef (type);
 
   if (print_values == PRINT_NO_VALUES)
     return 0;
@@ -335,12 +334,18 @@ mi_print_value_p (struct type *type, enum print_values print_values)
   if (print_values == PRINT_ALL_VALUES)
     return 1;
 
-  /* For PRINT_SIMPLE_VALUES, only print the value if it has a type
-     and that type is not a compound type.  */
+  if (type == NULL)
+    return 1;
+  else
+    {
+      type = check_typedef (type);
 
-  return (TYPE_CODE (type) != TYPE_CODE_ARRAY
-         && TYPE_CODE (type) != TYPE_CODE_STRUCT
-         && TYPE_CODE (type) != TYPE_CODE_UNION);
+      /* For PRINT_SIMPLE_VALUES, only print the value if it has a type
+        and that type is not a compound type.  */
+      return (TYPE_CODE (type) != TYPE_CODE_ARRAY
+             && TYPE_CODE (type) != TYPE_CODE_STRUCT
+             && TYPE_CODE (type) != TYPE_CODE_UNION);
+    }
 }
 
 enum mi_cmd_result
@@ -412,6 +417,27 @@ mi_cmd_var_info_type (char *command, char **argv, int argc)
   return MI_CMD_DONE;
 }
 
+enum mi_cmd_result
+mi_cmd_var_info_path_expression (char *command, char **argv, int argc)
+{
+  struct varobj *var;
+  char *path_expr;
+
+  if (argc != 1)
+    error (_("Usage: NAME."));
+
+  /* Get varobj handle, if a valid var obj name was specified.  */
+  var = varobj_get_handle (argv[0]);
+  if (var == NULL)
+    error (_("Variable object not found"));
+  
+  path_expr = varobj_get_path_expr (var);
+
+  ui_out_field_string (uiout, "path_expr", path_expr);
+
+  return MI_CMD_DONE;
+}
+
 enum mi_cmd_result
 mi_cmd_var_info_expression (char *command, char **argv, int argc)
 {
@@ -490,8 +516,7 @@ mi_cmd_var_assign (char *command, char **argv, int argc)
   if (var == NULL)
     error (_("mi_cmd_var_assign: Variable object not found"));
 
-  /* FIXME: define masks for attributes */
-  if (!(varobj_get_attributes (var) & 0x00000001))
+  if (!varobj_editable_p (var))
     error (_("mi_cmd_var_assign: Variable object is not editable"));
 
   expression = xstrdup (argv[1]);