diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-02-25 11:41:57 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-03-09 09:45:18 +0000 |
commit | e14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba (patch) | |
tree | 718883b66af773f86fc1ef753db65f8e33456f1c /gdb/f-lang.c | |
parent | 742732c7f0a989eaba7c1acac3ca5eeaa274df0e (diff) | |
download | gdb-e14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba.zip gdb-e14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba.tar.gz gdb-e14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba.tar.bz2 |
gdb/fortran: add support for RANK keyword
gfortran supports the RANK keyword, see:
https://gcc.gnu.org/onlinedocs/gfortran/RANK.html#RANK
this commit adds support for this keyword to GDB's Fortran expression
parser.
gdb/ChangeLog:
* f-exp.h (eval_op_f_rank): Declare.
(expr::fortran_rank_operation): New typedef.
* f-exp.y (exp): Handle UNOP_FORTRAN_RANK after parsing an
UNOP_INTRINSIC.
(f77_keywords): Add "rank" keyword.
* f-lang.c (eval_op_f_rank): New function.
* std-operator.def (UNOP_FORTRAN_RANK): New operator.
gdb/testsuite/ChangeLog:
* gdb.fortran/rank.exp: New file.
* gdb.fortran/rank.f90: New file.
Diffstat (limited to 'gdb/f-lang.c')
-rw-r--r-- | gdb/f-lang.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 1b66ae3..d30b13d 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -773,6 +773,26 @@ eval_op_f_allocated (struct type *expect_type, struct expression *exp, return value_from_longest (result_type, result_value); } +/* See f-exp.h. */ + +struct value * +eval_op_f_rank (struct type *expect_type, + struct expression *exp, + enum noside noside, + enum exp_opcode op, + struct value *arg1) +{ + gdb_assert (op == UNOP_FORTRAN_RANK); + + struct type *result_type + = builtin_f_type (exp->gdbarch)->builtin_integer; + struct type *type = check_typedef (value_type (arg1)); + if (type->code () != TYPE_CODE_ARRAY) + return value_from_longest (result_type, 0); + LONGEST ndim = calc_f77_array_dims (type); + return value_from_longest (result_type, ndim); +} + namespace expr { |