Implement Fortran associated operations
This implements the Fortran 1- and 2-argument "associated" operations. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_associated): New functions. * f-exp.h (fortran_associated_1arg, fortran_associated_2arg): New typedefs.
This commit is contained in:
parent
58a76c7264
commit
eb4c927182
3 changed files with 41 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* f-lang.c (eval_op_f_associated): New functions.
|
||||||
|
* f-exp.h (fortran_associated_1arg, fortran_associated_2arg): New
|
||||||
|
typedefs.
|
||||||
|
|
||||||
2021-03-08 Tom Tromey <tom@tromey.com>
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* f-lang.c (fortran_bound_1arg::evaluate)
|
* f-lang.c (fortran_bound_1arg::evaluate)
|
||||||
|
|
15
gdb/f-exp.h
15
gdb/f-exp.h
|
@ -57,6 +57,17 @@ extern struct value *eval_op_f_kind (struct type *expect_type,
|
||||||
enum noside noside,
|
enum noside noside,
|
||||||
enum exp_opcode opcode,
|
enum exp_opcode opcode,
|
||||||
struct value *arg1);
|
struct value *arg1);
|
||||||
|
extern struct value *eval_op_f_associated (struct type *expect_type,
|
||||||
|
struct expression *exp,
|
||||||
|
enum noside noside,
|
||||||
|
enum exp_opcode opcode,
|
||||||
|
struct value *arg1);
|
||||||
|
extern struct value *eval_op_f_associated (struct type *expect_type,
|
||||||
|
struct expression *exp,
|
||||||
|
enum noside noside,
|
||||||
|
enum exp_opcode opcode,
|
||||||
|
struct value *arg1,
|
||||||
|
struct value *arg2);
|
||||||
|
|
||||||
namespace expr
|
namespace expr
|
||||||
{
|
{
|
||||||
|
@ -72,6 +83,10 @@ using fortran_kind_operation = unop_operation<UNOP_FORTRAN_KIND,
|
||||||
using fortran_mod_operation = binop_operation<BINOP_MOD, eval_op_f_mod>;
|
using fortran_mod_operation = binop_operation<BINOP_MOD, eval_op_f_mod>;
|
||||||
using fortran_modulo_operation = binop_operation<BINOP_FORTRAN_MODULO,
|
using fortran_modulo_operation = binop_operation<BINOP_FORTRAN_MODULO,
|
||||||
eval_op_f_modulo>;
|
eval_op_f_modulo>;
|
||||||
|
using fortran_associated_1arg = unop_operation<FORTRAN_ASSOCIATED,
|
||||||
|
eval_op_f_associated>;
|
||||||
|
using fortran_associated_2arg = binop_operation<FORTRAN_ASSOCIATED,
|
||||||
|
eval_op_f_associated>;
|
||||||
|
|
||||||
/* The Fortran "complex" operation. */
|
/* The Fortran "complex" operation. */
|
||||||
class fortran_cmplx_operation
|
class fortran_cmplx_operation
|
||||||
|
|
20
gdb/f-lang.c
20
gdb/f-lang.c
|
@ -995,6 +995,26 @@ fortran_associated (struct gdbarch *gdbarch, const language_defn *lang,
|
||||||
return value_from_longest (result_type, is_associated ? 1 : 0);
|
return value_from_longest (result_type, is_associated ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct value *
|
||||||
|
eval_op_f_associated (struct type *expect_type,
|
||||||
|
struct expression *exp,
|
||||||
|
enum noside noside,
|
||||||
|
enum exp_opcode opcode,
|
||||||
|
struct value *arg1)
|
||||||
|
{
|
||||||
|
return fortran_associated (exp->gdbarch, exp->language_defn, arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct value *
|
||||||
|
eval_op_f_associated (struct type *expect_type,
|
||||||
|
struct expression *exp,
|
||||||
|
enum noside noside,
|
||||||
|
enum exp_opcode opcode,
|
||||||
|
struct value *arg1,
|
||||||
|
struct value *arg2)
|
||||||
|
{
|
||||||
|
return fortran_associated (exp->gdbarch, exp->language_defn, arg1, arg2);
|
||||||
|
}
|
||||||
|
|
||||||
/* A helper function for UNOP_ABS. */
|
/* A helper function for UNOP_ABS. */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue