/* Definitions for Fortran expressions
- Copyright (C) 2020, 2021 Free Software Foundation, Inc.
+ Copyright (C) 2020-2022 Free Software Foundation, Inc.
This file is part of GDB.
enum noside noside,
enum exp_opcode op,
struct value *arg1);
+extern struct value * eval_op_f_loc (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside,
+ 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
struct value *arg1,
struct value *arg2);
+/* Implement the evaluation of Fortran's SHAPE keyword. EXPECTED_TYPE,
+ EXP, and NOSIDE are as for expression::evaluate (see expression.h). OP
+ will always be UNOP_FORTRAN_SHAPE, and ARG1 is the argument being passed
+ to the expression. */
+
+extern struct value *eval_op_f_array_shape (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside,
+ enum exp_opcode op,
+ struct value *arg1);
namespace expr
{
eval_op_f_kind>;
using fortran_allocated_operation = unop_operation<UNOP_FORTRAN_ALLOCATED,
eval_op_f_allocated>;
+using fortran_loc_operation = unop_operation<UNOP_FORTRAN_LOC,
+ eval_op_f_loc>;
using fortran_mod_operation = binop_operation<BINOP_MOD, eval_op_f_mod>;
using fortran_modulo_operation = binop_operation<BINOP_FORTRAN_MODULO,
eval_op_f_array_size>;
using fortran_array_size_2arg = binop_operation<FORTRAN_ARRAY_SIZE,
eval_op_f_array_size>;
+using fortran_array_shape_operation = unop_operation<UNOP_FORTRAN_SHAPE,
+ eval_op_f_array_shape>;
/* The Fortran "complex" operation. */
class fortran_cmplx_operation
{ return std::get<0> (m_storage); }
};
+/* Implement STRUCTOP_STRUCT for Fortran. */
+class fortran_structop_operation
+ : public structop_base_operation
+{
+public:
+
+ using structop_base_operation::structop_base_operation;
+
+ value *evaluate (struct type *expect_type,
+ struct expression *exp,
+ enum noside noside) override;
+
+ enum exp_opcode opcode () const override
+ { return STRUCTOP_STRUCT; }
+};
+
} /* namespace expr */
#endif /* FORTRAN_EXP_H */