diff options
author | Wu Zhou <woodzltc@cn.ibm.com> | 2005-09-20 06:25:34 +0000 |
---|---|---|
committer | Wu Zhou <woodzltc@cn.ibm.com> | 2005-09-20 06:25:34 +0000 |
commit | 0b4e13251c935cb507296127d8af1c78fc627bd5 (patch) | |
tree | 2d9566d8763fb091f28846503023d46c7a5a899d /gdb/f-exp.y | |
parent | 096f7d00c1d4f1f28990b9546813d3be40589c13 (diff) | |
download | fsf-binutils-gdb-0b4e13251c935cb507296127d8af1c78fc627bd5.zip fsf-binutils-gdb-0b4e13251c935cb507296127d8af1c78fc627bd5.tar.gz fsf-binutils-gdb-0b4e13251c935cb507296127d8af1c78fc627bd5.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/f-exp.y')
-rw-r--r-- | gdb/f-exp.y | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 0deb816..4e1f635 100644 --- a/gdb/f-exp.y +++ b/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 { } |