diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-02-25 16:15:52 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2021-03-09 09:51:23 +0000 |
commit | 7ba155b37073a3512c85f1d7f12dbaed9a6db3e2 (patch) | |
tree | 41e98c0082c4cae7c641a83851708fef750eec8e /gdb/f-exp.y | |
parent | e14816a8ba5ecf8d7c0125a08afe87fb7d1a6bba (diff) | |
download | gdb-7ba155b37073a3512c85f1d7f12dbaed9a6db3e2.zip gdb-7ba155b37073a3512c85f1d7f12dbaed9a6db3e2.tar.gz gdb-7ba155b37073a3512c85f1d7f12dbaed9a6db3e2.tar.bz2 |
gdb/fortran: add support for 'SIZE' keyword
Add support for the 'SIZE' keyword to the Fortran expression parser.
This returns the number of elements either in an entire array (passing
a single argument to SIZE), or in a particular dimension of an
array (passing two arguments to SIZE).
At this point I have not added support for the optional third argument
to SIZE, which controls the exact integer type of the result.
gdb/ChangeLog:
* f-exp.y (eval_op_f_array_size): Declare 1 and 2 argument forms
of this function.
(expr::fortran_array_size_1arg): New type.
(expr::fortran_array_size_2arg): Likewise.
* f-exp.y (exp): Handle FORTRAN_ARRAY_SIZE after parsing
UNOP_OR_BINOP_INTRINSIC.
(f77_keywords): Add "size" keyword.
* f-lang.c (fortran_array_size): New function.
(eval_op_f_array_size): New function, has a 1 arg and 2 arg form.
* std-operator.def (FORTRAN_ARRAY_SIZE): New operator.
gdb/testsuite/ChangeLog:
* gdb.fortran/size.exp: New file.
* gdb.fortran/size.f90: New file.
Diffstat (limited to 'gdb/f-exp.y')
-rw-r--r-- | gdb/f-exp.y | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 02e35c8..e652bd9 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -260,6 +260,13 @@ exp : UNOP_OR_BINOP_INTRINSIC '(' else pstate->wrap2<fortran_associated_2arg> (); } + else if ($1 == FORTRAN_ARRAY_SIZE) + { + if (n == 1) + pstate->wrap<fortran_array_size_1arg> (); + else + pstate->wrap2<fortran_array_size_2arg> (); + } else { std::vector<operation_up> args @@ -1143,6 +1150,7 @@ static const struct token f77_keywords[] = { "allocated", UNOP_INTRINSIC, UNOP_FORTRAN_ALLOCATED, false }, { "associated", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ASSOCIATED, false }, { "rank", UNOP_INTRINSIC, UNOP_FORTRAN_RANK, false }, + { "size", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ARRAY_SIZE, false }, }; /* Implementation of a dynamically expandable buffer for processing input |