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:
Fred Fish 2006-02-18 20:47:54 +00:00
parent 62f3a2ba52
commit d843c49cbf
3 changed files with 18 additions and 47 deletions

View 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):

View 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

View 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.