From d843c49cbf3970abc659c9ab96f845859ce28377 Mon Sep 17 00:00:00 2001 From: Fred Fish Date: Sat, 18 Feb 2006 20:47:54 +0000 Subject: [PATCH] 2006-02-16 Fred Fish * 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 | 8 ++++++++ gdb/eval.c | 10 +++++++++- gdb/typeprint.c | 47 +---------------------------------------------- 3 files changed, 18 insertions(+), 47 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 40af2dfb1c..52c376c4f3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2006-02-16 Fred Fish + + * 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 * 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 961b89e2a1..66776ea3ca 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 2fcd225a32..d31d521bf8 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 " */ - printf_filtered ("type = "); - type_print (type, "", gdb_stdout, 1); - printf_filtered ("\n"); - do_cleanups (old_chain); - } - else - { - /* User did "ptype " */ - do_cleanups (old_chain); - whatis_exp (typename, 1); - } - } + whatis_exp (typename, 1); } /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.