* 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:
Wu Zhou
2005-09-20 06:25:34 +00:00
parent 096f7d00c1
commit 0b4e13251c
6 changed files with 116 additions and 29 deletions

View File

@ -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
{ }