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:
Pierre Muller 2002-11-19 12:44:43 +00:00
parent 5dec918223
commit fd0e9d45dd
2 changed files with 42 additions and 4 deletions

View file

@ -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,

View file

@ -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),