* ch-exp.y (expression_conversion): Recognize 'ARRAY () TYPE (EXPR)'

(same as C's '(TYPE[])EXPR')
This commit is contained in:
Per Bothner 1995-02-22 07:43:01 +00:00
parent d439f0eca6
commit 835c255965
2 changed files with 27 additions and 0 deletions

View file

@ -1,3 +1,12 @@
Tue Feb 21 20:48:42 1995 Per Bothner <bothner@kalessin.cygnus.com>
* valops.c (call_function_by_hand): Set using_gcc to 2 if gcc-2.
Call error if too few arguments.
If REG_STRUCT_HAS_ADDR (structs passed by invisible reference),
copy and convert to reference *before* we calculate alignment.
Also, make sure structs allocated for return values and invisible
reference don't violate STACK_ALIGN.
Tue Feb 21 11:47:26 1995 Stan Shebs <shebs@andros.cygnus.com> Tue Feb 21 11:47:26 1995 Stan Shebs <shebs@andros.cygnus.com>
* top.c (print_gdb_version): Update the year. * top.c (print_gdb_version): Update the year.

View file

@ -237,6 +237,7 @@ yyerror PARAMS ((char *));
%token <voidval> UPPER %token <voidval> UPPER
%token <voidval> LOWER %token <voidval> LOWER
%token <voidval> LENGTH %token <voidval> LENGTH
%token <voidval> ARRAY
/* Tokens which are not Chill tokens used in expressions, but rather GDB /* Tokens which are not Chill tokens used in expressions, but rather GDB
specific things that we recognize in the same context as Chill tokens specific things that we recognize in the same context as Chill tokens
@ -608,6 +609,22 @@ expression_conversion: mode_name parenthesised_expression
write_exp_elt_type ($1.type); write_exp_elt_type ($1.type);
write_exp_elt_opcode (UNOP_CAST); write_exp_elt_opcode (UNOP_CAST);
} }
| ARRAY '(' ')' mode_name parenthesised_expression
/* This is pseudo-Chill, similar to C's '(TYPE[])EXPR'
which casts to an artificial array. */
{
struct type *range_type
= create_range_type ((struct type *) NULL,
builtin_type_int, 0, 0);
struct type *array_type
= create_array_type ((struct type *) NULL,
$4.type, range_type);
TYPE_ARRAY_UPPER_BOUND_TYPE(array_type)
= BOUND_CANNOT_BE_DETERMINED;
write_exp_elt_opcode (UNOP_CAST);
write_exp_elt_type (array_type);
write_exp_elt_opcode (UNOP_CAST);
}
; ;
/* Z.200, 5.2.12 */ /* Z.200, 5.2.12 */
@ -1717,6 +1734,7 @@ struct token
static const struct token idtokentab[] = static const struct token idtokentab[] =
{ {
{ "array", ARRAY },
{ "length", LENGTH }, { "length", LENGTH },
{ "lower", LOWER }, { "lower", LOWER },
{ "upper", UPPER }, { "upper", UPPER },