2002-11-19 Pierre Muller <muller@ics.u-strasbg.fr>
* p-exp.y (typecast rule): Add automatic dereference of pascal classes if needed. (THIS): Set current_type. Automatically dereference pascal classes. (typebase rule): Add ^typebase recognition.
This commit is contained in:
parent
5dec918223
commit
fd0e9d45dd
2 changed files with 42 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
2002-11-19 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||
|
||||
* p-exp.y (typecast rule): Add automatic dereference of
|
||||
pascal classes if needed.
|
||||
(THIS): Set current_type.
|
||||
Automatically dereference pascal classes.
|
||||
(typebase rule): Add ^typebase recognition.
|
||||
|
||||
2002-11-18 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* expprint.c (print_subexp): Handle OP_OBJC_NSSTRING,
|
||||
|
|
38
gdb/p-exp.y
38
gdb/p-exp.y
|
@ -342,7 +342,15 @@ arglist :
|
|||
;
|
||||
|
||||
exp : type '(' exp ')' %prec UNARY
|
||||
{ write_exp_elt_opcode (UNOP_CAST);
|
||||
{ if (current_type)
|
||||
{
|
||||
/* Allow automatic dereference of classes. */
|
||||
if ((TYPE_CODE (current_type) == TYPE_CODE_PTR)
|
||||
&& (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_CLASS)
|
||||
&& (TYPE_CODE ($1) == TYPE_CODE_CLASS))
|
||||
write_exp_elt_opcode (UNOP_IND);
|
||||
}
|
||||
write_exp_elt_opcode (UNOP_CAST);
|
||||
write_exp_elt_type ($1);
|
||||
write_exp_elt_opcode (UNOP_CAST);
|
||||
current_type = $1; }
|
||||
|
@ -504,8 +512,28 @@ exp : STRING
|
|||
|
||||
/* Object pascal */
|
||||
exp : THIS
|
||||
{ write_exp_elt_opcode (OP_THIS);
|
||||
write_exp_elt_opcode (OP_THIS); }
|
||||
{
|
||||
struct value * this_val;
|
||||
struct type * this_type;
|
||||
write_exp_elt_opcode (OP_THIS);
|
||||
write_exp_elt_opcode (OP_THIS);
|
||||
/* we need type of this */
|
||||
this_val = value_of_this (0);
|
||||
if (this_val)
|
||||
this_type = this_val->type;
|
||||
else
|
||||
this_type = NULL;
|
||||
if (this_type)
|
||||
{
|
||||
if (TYPE_CODE (this_type) == TYPE_CODE_PTR)
|
||||
{
|
||||
this_type = TYPE_TARGET_TYPE (this_type);
|
||||
write_exp_elt_opcode (UNOP_IND);
|
||||
}
|
||||
}
|
||||
|
||||
current_type = this_type;
|
||||
}
|
||||
;
|
||||
|
||||
/* end of object pascal. */
|
||||
|
@ -693,7 +721,9 @@ type : ptype
|
|||
;
|
||||
|
||||
typebase /* Implements (approximately): (type-qualifier)* type-specifier */
|
||||
: TYPENAME
|
||||
: '^' typebase
|
||||
{ $$ = lookup_pointer_type ($2); }
|
||||
| TYPENAME
|
||||
{ $$ = $1.type; }
|
||||
| STRUCT name
|
||||
{ $$ = lookup_struct (copy_name ($2),
|
||||
|
|
Loading…
Reference in a new issue