aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/eval.c10
-rw-r--r--gdb/typeprint.c47
3 files changed, 18 insertions, 47 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 40af2df..52c376c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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):
diff --git a/gdb/eval.c b/gdb/eval.c
index 961b89e..66776ea 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -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
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
index 2fcd225..d31d521 100644
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
@@ -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.