2006-02-16 Fred Fish <fnf@specifix.com>
authorFred Fish <fnf@specifix.com>
Sat, 18 Feb 2006 20:47:54 +0000 (20:47 +0000)
committerFred Fish <fnf@specifix.com>
Sat, 18 Feb 2006 20:47:54 +0000 (20:47 +0000)
* eval.c (evaluate_subexp_standard):  For OP_TYPE, return
a non lval value zero, of the appropriate type, when avoiding
side effects.
* typeprint.c (ptype_eval): Remove function and declaration.
(ptype_command): Simplify to just a call to whatis_exp.

gdb/ChangeLog
gdb/eval.c
gdb/typeprint.c

index 40af2dfb1cc7f352caa3489c41248ca0fbf7fb9d..52c376c4f3146b38ddce62a948938c3a49f62835 100644 (file)
@@ -1,3 +1,11 @@
+2006-02-16  Fred Fish  <fnf@specifix.com>
+
+       * eval.c (evaluate_subexp_standard):  For OP_TYPE, return
+       a non lval value zero, of the appropriate type, when avoiding
+       side effects.
+       * typeprint.c (ptype_eval): Remove function and declaration.
+       (ptype_command): Simplify to just a call to whatis_exp.
+
 2006-02-15  Paul Brook  <paul@codesourcery.com>
 
        * arm-tdep.c (arm_skip_prologue, thumb_get_next_pc, arm_get_next_pc):
index 961b89e2a1c6ba6342f29cf05d1afac7b37d8bea..66776ea3cac2d9afa4824b2264a06cc1acd686e7 100644 (file)
@@ -2086,7 +2086,15 @@ evaluate_subexp_standard (struct type *expect_type,
       return value_of_local ("self", 1);
 
     case OP_TYPE:
-      error (_("Attempt to use a type name as an expression"));
+      /* The value is not supposed to be used.  This is here to make it
+         easier to accommodate expressions that contain types.  */
+      (*pos) += 2;
+      if (noside == EVAL_SKIP)
+        goto nosideret;
+      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
+        return allocate_value (exp->elts[pc + 1].type);
+      else
+        error (_("Attempt to use a type name as an expression"));
 
     default:
       /* Removing this case and compiling with gcc -Wall reveals that
index 2fcd225a32c0c0bf20d03f85eb23fada241b2182..d31d521bf8f1512f3a5e5b46f531b83f7888fdaa 100644 (file)
@@ -45,8 +45,6 @@ extern void _initialize_typeprint (void);
 
 static void ptype_command (char *, int);
 
-static struct type *ptype_eval (struct expression *);
-
 static void whatis_command (char *, int);
 
 static void whatis_exp (char *, int);
@@ -182,55 +180,12 @@ whatis_command (char *exp, int from_tty)
   whatis_exp (exp, -1);
 }
 
-/* Simple subroutine for ptype_command.  */
-
-static struct type *
-ptype_eval (struct expression *exp)
-{
-  if (exp->elts[0].opcode == OP_TYPE)
-    {
-      return (exp->elts[1].type);
-    }
-  else
-    {
-      return (NULL);
-    }
-}
-
 /* TYPENAME is either the name of a type, or an expression.  */
 
 static void
 ptype_command (char *typename, int from_tty)
 {
-  struct type *type;
-  struct expression *expr;
-  struct cleanup *old_chain;
-
-  if (typename == NULL)
-    {
-      /* Print type of last thing in value history. */
-      whatis_exp (typename, 1);
-    }
-  else
-    {
-      expr = parse_expression (typename);
-      old_chain = make_cleanup (free_current_contents, &expr);
-      type = ptype_eval (expr);
-      if (type != NULL)
-       {
-         /* User did "ptype <typename>" */
-         printf_filtered ("type = ");
-         type_print (type, "", gdb_stdout, 1);
-         printf_filtered ("\n");
-         do_cleanups (old_chain);
-       }
-      else
-       {
-         /* User did "ptype <symbolname>" */
-         do_cleanups (old_chain);
-         whatis_exp (typename, 1);
-       }
-    }
+  whatis_exp (typename, 1);
 }
 
 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.