aboutsummaryrefslogtreecommitdiff
path: root/gdb/f-exp.h
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2021-02-25 11:41:57 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2021-03-09 09:45:18 +0000
commite14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba (patch)
tree718883b66af773f86fc1ef753db65f8e33456f1c /gdb/f-exp.h
parent742732c7f0a989eaba7c1acac3ca5eeaa274df0e (diff)
downloadgdb-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-exp.h')
-rw-r--r--gdb/f-exp.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/f-exp.h b/gdb/f-exp.h
index 81cf341..f23c426 100644
--- a/gdb/f-exp.h
+++ b/gdb/f-exp.h
@@ -74,6 +74,17 @@ extern struct value * eval_op_f_allocated (struct type *expect_type,
enum exp_opcode op,
struct value *arg1);
+/* Implement the evaluation of UNOP_FORTRAN_RANK. EXPECTED_TYPE, EXP, and
+ NOSIDE are as for expression::evaluate (see expression.h). OP will
+ always be UNOP_FORTRAN_RANK, and ARG1 is the argument being passed to
+ the expression. */
+
+extern struct value *eval_op_f_rank (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside,
+ enum exp_opcode op,
+ struct value *arg1);
+
namespace expr
{
@@ -94,6 +105,8 @@ using fortran_associated_1arg = unop_operation<FORTRAN_ASSOCIATED,
eval_op_f_associated>;
using fortran_associated_2arg = binop_operation<FORTRAN_ASSOCIATED,
eval_op_f_associated>;
+using fortran_rank_operation = unop_operation<UNOP_FORTRAN_RANK,
+ eval_op_f_rank>;
/* The Fortran "complex" operation. */
class fortran_cmplx_operation