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.
This commit is contained in:
parent
62f3a2ba52
commit
d843c49cbf
@ -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):
|
||||
|
10
gdb/eval.c
10
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
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user