mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
* expression.h (enum exp_opcode): Add a new operator for F90
subrange. * f-lang.h (enum f90_range_type): New enumeration type to identify F90 subrange type. * f-exp.y (yyparse): Add support for parsing F90 subrange and change substring parsing to subrange parsing. * parse.c (operator_length_standard): Set the operator length and args number for OP_F90_RANGE. * eval.c (evaluate_subexp_standard): Add code to evaluate F90 array section and substring. (value_f90_subarray): New function to evaluate F90 array section. (evaluate_subexp_standard): Delete label op_f77_substr and its code because the logic is implemented by function value_f90_subarray now.
This commit is contained in:
29
gdb/f-exp.y
29
gdb/f-exp.y
@ -283,18 +283,39 @@ arglist : exp
|
||||
{ arglist_len = 1; }
|
||||
;
|
||||
|
||||
arglist : substring
|
||||
{ arglist_len = 2;}
|
||||
arglist : subrange
|
||||
{ arglist_len = 1; }
|
||||
;
|
||||
|
||||
arglist : arglist ',' exp %prec ABOVE_COMMA
|
||||
{ arglist_len++; }
|
||||
;
|
||||
|
||||
substring: exp ':' exp %prec ABOVE_COMMA
|
||||
{ }
|
||||
/* There are four sorts of subrange types in F90. */
|
||||
|
||||
subrange: exp ':' exp %prec ABOVE_COMMA
|
||||
{ write_exp_elt_opcode (OP_F90_RANGE);
|
||||
write_exp_elt_longcst (NONE_BOUND_DEFAULT);
|
||||
write_exp_elt_opcode (OP_F90_RANGE); }
|
||||
;
|
||||
|
||||
subrange: exp ':' %prec ABOVE_COMMA
|
||||
{ write_exp_elt_opcode (OP_F90_RANGE);
|
||||
write_exp_elt_longcst (HIGH_BOUND_DEFAULT);
|
||||
write_exp_elt_opcode (OP_F90_RANGE); }
|
||||
;
|
||||
|
||||
subrange: ':' exp %prec ABOVE_COMMA
|
||||
{ write_exp_elt_opcode (OP_F90_RANGE);
|
||||
write_exp_elt_longcst (LOW_BOUND_DEFAULT);
|
||||
write_exp_elt_opcode (OP_F90_RANGE); }
|
||||
;
|
||||
|
||||
subrange: ':' %prec ABOVE_COMMA
|
||||
{ write_exp_elt_opcode (OP_F90_RANGE);
|
||||
write_exp_elt_longcst (BOTH_BOUND_DEFAULT);
|
||||
write_exp_elt_opcode (OP_F90_RANGE); }
|
||||
;
|
||||
|
||||
complexnum: exp ',' exp
|
||||
{ }
|
||||
|
Reference in New Issue
Block a user