1*6881a400Schristos /* Definitions for Fortran expressions 2*6881a400Schristos 3*6881a400Schristos Copyright (C) 2020-2023 Free Software Foundation, Inc. 4*6881a400Schristos 5*6881a400Schristos This file is part of GDB. 6*6881a400Schristos 7*6881a400Schristos This program is free software; you can redistribute it and/or modify 8*6881a400Schristos it under the terms of the GNU General Public License as published by 9*6881a400Schristos the Free Software Foundation; either version 3 of the License, or 10*6881a400Schristos (at your option) any later version. 11*6881a400Schristos 12*6881a400Schristos This program is distributed in the hope that it will be useful, 13*6881a400Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 14*6881a400Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*6881a400Schristos GNU General Public License for more details. 16*6881a400Schristos 17*6881a400Schristos You should have received a copy of the GNU General Public License 18*6881a400Schristos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19*6881a400Schristos 20*6881a400Schristos #ifndef FORTRAN_EXP_H 21*6881a400Schristos #define FORTRAN_EXP_H 22*6881a400Schristos 23*6881a400Schristos #include "expop.h" 24*6881a400Schristos 25*6881a400Schristos extern struct value *eval_op_f_abs (struct type *expect_type, 26*6881a400Schristos struct expression *exp, 27*6881a400Schristos enum noside noside, 28*6881a400Schristos enum exp_opcode opcode, 29*6881a400Schristos struct value *arg1); 30*6881a400Schristos extern struct value *eval_op_f_mod (struct type *expect_type, 31*6881a400Schristos struct expression *exp, 32*6881a400Schristos enum noside noside, 33*6881a400Schristos enum exp_opcode opcode, 34*6881a400Schristos struct value *arg1, struct value *arg2); 35*6881a400Schristos 36*6881a400Schristos /* Implement expression evaluation for Fortran's CEILING intrinsic function 37*6881a400Schristos called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see 38*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 39*6881a400Schristos FORTRAN_CEILING and ARG1 is the argument passed to CEILING. */ 40*6881a400Schristos 41*6881a400Schristos extern struct value *eval_op_f_ceil (struct type *expect_type, 42*6881a400Schristos struct expression *exp, 43*6881a400Schristos enum noside noside, 44*6881a400Schristos enum exp_opcode opcode, 45*6881a400Schristos struct value *arg1); 46*6881a400Schristos 47*6881a400Schristos /* Implement expression evaluation for Fortran's CEILING intrinsic function 48*6881a400Schristos called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see 49*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 50*6881a400Schristos FORTRAN_CEILING, ARG1 is the first argument passed to CEILING, and KIND_ARG 51*6881a400Schristos is the type corresponding to the KIND parameter passed to CEILING. */ 52*6881a400Schristos 53*6881a400Schristos extern value *eval_op_f_ceil (type *expect_type, expression *exp, 54*6881a400Schristos noside noside, exp_opcode opcode, value *arg1, 55*6881a400Schristos type *kind_arg); 56*6881a400Schristos 57*6881a400Schristos /* Implement expression evaluation for Fortran's FLOOR intrinsic function 58*6881a400Schristos called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see 59*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be FORTRAN_FLOOR 60*6881a400Schristos and ARG1 is the argument passed to FLOOR. */ 61*6881a400Schristos 62*6881a400Schristos extern struct value *eval_op_f_floor (struct type *expect_type, 63*6881a400Schristos struct expression *exp, 64*6881a400Schristos enum noside noside, 65*6881a400Schristos enum exp_opcode opcode, 66*6881a400Schristos struct value *arg1); 67*6881a400Schristos 68*6881a400Schristos /* Implement expression evaluation for Fortran's FLOOR intrinsic function 69*6881a400Schristos called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see 70*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 71*6881a400Schristos FORTRAN_FLOOR, ARG1 is the first argument passed to FLOOR, and KIND_ARG is 72*6881a400Schristos the type corresponding to the KIND parameter passed to FLOOR. */ 73*6881a400Schristos 74*6881a400Schristos extern value *eval_op_f_floor (type *expect_type, expression *exp, 75*6881a400Schristos noside noside, exp_opcode opcode, value *arg1, 76*6881a400Schristos type *kind_arg); 77*6881a400Schristos 78*6881a400Schristos extern struct value *eval_op_f_modulo (struct type *expect_type, 79*6881a400Schristos struct expression *exp, 80*6881a400Schristos enum noside noside, 81*6881a400Schristos enum exp_opcode opcode, 82*6881a400Schristos struct value *arg1, struct value *arg2); 83*6881a400Schristos 84*6881a400Schristos /* Implement expression evaluation for Fortran's CMPLX intrinsic function 85*6881a400Schristos called with one argument. For EXPECT_TYPE, EXP, and NOSIDE see 86*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 87*6881a400Schristos FORTRAN_CMPLX and ARG1 is the argument passed to CMPLX if. */ 88*6881a400Schristos 89*6881a400Schristos extern value *eval_op_f_cmplx (type *expect_type, expression *exp, 90*6881a400Schristos noside noside, exp_opcode opcode, value *arg1); 91*6881a400Schristos 92*6881a400Schristos /* Implement expression evaluation for Fortran's CMPLX intrinsic function 93*6881a400Schristos called with two arguments. For EXPECT_TYPE, EXP, and NOSIDE see 94*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 95*6881a400Schristos FORTRAN_CMPLX, ARG1 and ARG2 are the arguments passed to CMPLX. */ 96*6881a400Schristos 97*6881a400Schristos extern struct value *eval_op_f_cmplx (struct type *expect_type, 98*6881a400Schristos struct expression *exp, 99*6881a400Schristos enum noside noside, 100*6881a400Schristos enum exp_opcode opcode, 101*6881a400Schristos struct value *arg1, struct value *arg2); 102*6881a400Schristos 103*6881a400Schristos /* Implement expression evaluation for Fortran's CMPLX intrinsic function 104*6881a400Schristos called with three arguments. For EXPECT_TYPE, EXP, and NOSIDE see 105*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 106*6881a400Schristos FORTRAN_CMPLX, ARG1 and ARG2 are real and imaginary part passed to CMPLX, 107*6881a400Schristos and KIND_ARG is the type corresponding to the KIND parameter passed to 108*6881a400Schristos CMPLX. */ 109*6881a400Schristos 110*6881a400Schristos extern value *eval_op_f_cmplx (type *expect_type, expression *exp, 111*6881a400Schristos noside noside, exp_opcode opcode, value *arg1, 112*6881a400Schristos value *arg2, type *kind_arg); 113*6881a400Schristos 114*6881a400Schristos extern struct value *eval_op_f_kind (struct type *expect_type, 115*6881a400Schristos struct expression *exp, 116*6881a400Schristos enum noside noside, 117*6881a400Schristos enum exp_opcode opcode, 118*6881a400Schristos struct value *arg1); 119*6881a400Schristos extern struct value *eval_op_f_associated (struct type *expect_type, 120*6881a400Schristos struct expression *exp, 121*6881a400Schristos enum noside noside, 122*6881a400Schristos enum exp_opcode opcode, 123*6881a400Schristos struct value *arg1); 124*6881a400Schristos extern struct value *eval_op_f_associated (struct type *expect_type, 125*6881a400Schristos struct expression *exp, 126*6881a400Schristos enum noside noside, 127*6881a400Schristos enum exp_opcode opcode, 128*6881a400Schristos struct value *arg1, 129*6881a400Schristos struct value *arg2); 130*6881a400Schristos extern struct value * eval_op_f_allocated (struct type *expect_type, 131*6881a400Schristos struct expression *exp, 132*6881a400Schristos enum noside noside, 133*6881a400Schristos enum exp_opcode op, 134*6881a400Schristos struct value *arg1); 135*6881a400Schristos extern struct value * eval_op_f_loc (struct type *expect_type, 136*6881a400Schristos struct expression *exp, 137*6881a400Schristos enum noside noside, 138*6881a400Schristos enum exp_opcode op, 139*6881a400Schristos struct value *arg1); 140*6881a400Schristos 141*6881a400Schristos /* Implement the evaluation of UNOP_FORTRAN_RANK. EXPECTED_TYPE, EXP, and 142*6881a400Schristos NOSIDE are as for expression::evaluate (see expression.h). OP will 143*6881a400Schristos always be UNOP_FORTRAN_RANK, and ARG1 is the argument being passed to 144*6881a400Schristos the expression. */ 145*6881a400Schristos 146*6881a400Schristos extern struct value *eval_op_f_rank (struct type *expect_type, 147*6881a400Schristos struct expression *exp, 148*6881a400Schristos enum noside noside, 149*6881a400Schristos enum exp_opcode op, 150*6881a400Schristos struct value *arg1); 151*6881a400Schristos 152*6881a400Schristos /* Implement expression evaluation for Fortran's SIZE keyword. For 153*6881a400Schristos EXPECT_TYPE, EXP, and NOSIDE see expression::evaluate (in 154*6881a400Schristos expression.h). OPCODE will always for FORTRAN_ARRAY_SIZE. ARG1 is the 155*6881a400Schristos value passed to SIZE if it is only passed a single argument. For the 156*6881a400Schristos two argument form see the overload of this function below. */ 157*6881a400Schristos 158*6881a400Schristos extern struct value *eval_op_f_array_size (struct type *expect_type, 159*6881a400Schristos struct expression *exp, 160*6881a400Schristos enum noside noside, 161*6881a400Schristos enum exp_opcode opcode, 162*6881a400Schristos struct value *arg1); 163*6881a400Schristos 164*6881a400Schristos /* An overload of EVAL_OP_F_ARRAY_SIZE above, this version takes two 165*6881a400Schristos arguments, representing the two values passed to Fortran's SIZE 166*6881a400Schristos keyword. */ 167*6881a400Schristos 168*6881a400Schristos extern struct value *eval_op_f_array_size (struct type *expect_type, 169*6881a400Schristos struct expression *exp, 170*6881a400Schristos enum noside noside, 171*6881a400Schristos enum exp_opcode opcode, 172*6881a400Schristos struct value *arg1, 173*6881a400Schristos struct value *arg2); 174*6881a400Schristos 175*6881a400Schristos /* Implement expression evaluation for Fortran's SIZE intrinsic function called 176*6881a400Schristos with three arguments. For EXPECT_TYPE, EXP, and NOSIDE see 177*6881a400Schristos expression::evaluate (in expression.h). OPCODE will always be 178*6881a400Schristos FORTRAN_ARRAY_SIZE, ARG1 and ARG2 the first two values passed to SIZE, and 179*6881a400Schristos KIND_ARG is the type corresponding to the KIND parameter passed to SIZE. */ 180*6881a400Schristos 181*6881a400Schristos extern value *eval_op_f_array_size (type *expect_type, expression *exp, 182*6881a400Schristos noside noside, exp_opcode opcode, 183*6881a400Schristos value *arg1, value *arg2, type *kind_arg); 184*6881a400Schristos 185*6881a400Schristos /* Implement the evaluation of Fortran's SHAPE keyword. EXPECTED_TYPE, 186*6881a400Schristos EXP, and NOSIDE are as for expression::evaluate (see expression.h). OP 187*6881a400Schristos will always be UNOP_FORTRAN_SHAPE, and ARG1 is the argument being passed 188*6881a400Schristos to the expression. */ 189*6881a400Schristos 190*6881a400Schristos extern struct value *eval_op_f_array_shape (struct type *expect_type, 191*6881a400Schristos struct expression *exp, 192*6881a400Schristos enum noside noside, 193*6881a400Schristos enum exp_opcode op, 194*6881a400Schristos struct value *arg1); 195*6881a400Schristos 196*6881a400Schristos namespace expr 197*6881a400Schristos { 198*6881a400Schristos 199*6881a400Schristos /* Function prototype for Fortran intrinsic functions taking one argument and 200*6881a400Schristos one kind argument. */ 201*6881a400Schristos typedef value *binary_kind_ftype (type *expect_type, expression *exp, 202*6881a400Schristos noside noside, exp_opcode op, value *arg1, 203*6881a400Schristos type *kind_arg); 204*6881a400Schristos 205*6881a400Schristos /* Two-argument operation with the second argument being a kind argument. */ 206*6881a400Schristos template<exp_opcode OP, binary_kind_ftype FUNC> 207*6881a400Schristos class fortran_kind_2arg 208*6881a400Schristos : public tuple_holding_operation<operation_up, type*> 209*6881a400Schristos { 210*6881a400Schristos public: 211*6881a400Schristos 212*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 213*6881a400Schristos 214*6881a400Schristos value *evaluate (type *expect_type, expression *exp, noside noside) override 215*6881a400Schristos { 216*6881a400Schristos value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); 217*6881a400Schristos type *kind_arg = std::get<1> (m_storage); 218*6881a400Schristos return FUNC (expect_type, exp, noside, OP, arg1, kind_arg); 219*6881a400Schristos } 220*6881a400Schristos 221*6881a400Schristos exp_opcode opcode () const override 222*6881a400Schristos { return OP; } 223*6881a400Schristos }; 224*6881a400Schristos 225*6881a400Schristos /* Function prototype for Fortran intrinsic functions taking two arguments and 226*6881a400Schristos one kind argument. */ 227*6881a400Schristos typedef value *ternary_kind_ftype (type *expect_type, expression *exp, 228*6881a400Schristos noside noside, exp_opcode op, value *arg1, 229*6881a400Schristos value *arg2, type *kind_arg); 230*6881a400Schristos 231*6881a400Schristos /* Three-argument operation with the third argument being a kind argument. */ 232*6881a400Schristos template<exp_opcode OP, ternary_kind_ftype FUNC> 233*6881a400Schristos class fortran_kind_3arg 234*6881a400Schristos : public tuple_holding_operation<operation_up, operation_up, type *> 235*6881a400Schristos { 236*6881a400Schristos public: 237*6881a400Schristos 238*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 239*6881a400Schristos 240*6881a400Schristos value *evaluate (type *expect_type, expression *exp, noside noside) override 241*6881a400Schristos { 242*6881a400Schristos value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); 243*6881a400Schristos value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); 244*6881a400Schristos type *kind_arg = std::get<2> (m_storage); 245*6881a400Schristos return FUNC (expect_type, exp, noside, OP, arg1, arg2, kind_arg); 246*6881a400Schristos } 247*6881a400Schristos 248*6881a400Schristos exp_opcode opcode () const override 249*6881a400Schristos { return OP; } 250*6881a400Schristos }; 251*6881a400Schristos 252*6881a400Schristos using fortran_abs_operation = unop_operation<UNOP_ABS, eval_op_f_abs>; 253*6881a400Schristos using fortran_ceil_operation_1arg = unop_operation<FORTRAN_CEILING, 254*6881a400Schristos eval_op_f_ceil>; 255*6881a400Schristos using fortran_ceil_operation_2arg = fortran_kind_2arg<FORTRAN_CEILING, 256*6881a400Schristos eval_op_f_ceil>; 257*6881a400Schristos using fortran_floor_operation_1arg = unop_operation<FORTRAN_FLOOR, 258*6881a400Schristos eval_op_f_floor>; 259*6881a400Schristos using fortran_floor_operation_2arg = fortran_kind_2arg<FORTRAN_FLOOR, 260*6881a400Schristos eval_op_f_floor>; 261*6881a400Schristos using fortran_kind_operation = unop_operation<UNOP_FORTRAN_KIND, 262*6881a400Schristos eval_op_f_kind>; 263*6881a400Schristos using fortran_allocated_operation = unop_operation<UNOP_FORTRAN_ALLOCATED, 264*6881a400Schristos eval_op_f_allocated>; 265*6881a400Schristos using fortran_loc_operation = unop_operation<UNOP_FORTRAN_LOC, 266*6881a400Schristos eval_op_f_loc>; 267*6881a400Schristos 268*6881a400Schristos using fortran_mod_operation = binop_operation<BINOP_MOD, eval_op_f_mod>; 269*6881a400Schristos using fortran_modulo_operation = binop_operation<BINOP_FORTRAN_MODULO, 270*6881a400Schristos eval_op_f_modulo>; 271*6881a400Schristos using fortran_associated_1arg = unop_operation<FORTRAN_ASSOCIATED, 272*6881a400Schristos eval_op_f_associated>; 273*6881a400Schristos using fortran_associated_2arg = binop_operation<FORTRAN_ASSOCIATED, 274*6881a400Schristos eval_op_f_associated>; 275*6881a400Schristos using fortran_rank_operation = unop_operation<UNOP_FORTRAN_RANK, 276*6881a400Schristos eval_op_f_rank>; 277*6881a400Schristos using fortran_array_size_1arg = unop_operation<FORTRAN_ARRAY_SIZE, 278*6881a400Schristos eval_op_f_array_size>; 279*6881a400Schristos using fortran_array_size_2arg = binop_operation<FORTRAN_ARRAY_SIZE, 280*6881a400Schristos eval_op_f_array_size>; 281*6881a400Schristos using fortran_array_size_3arg = fortran_kind_3arg<FORTRAN_ARRAY_SIZE, 282*6881a400Schristos eval_op_f_array_size>; 283*6881a400Schristos using fortran_array_shape_operation = unop_operation<UNOP_FORTRAN_SHAPE, 284*6881a400Schristos eval_op_f_array_shape>; 285*6881a400Schristos using fortran_cmplx_operation_1arg = unop_operation<FORTRAN_CMPLX, 286*6881a400Schristos eval_op_f_cmplx>; 287*6881a400Schristos using fortran_cmplx_operation_2arg = binop_operation<FORTRAN_CMPLX, 288*6881a400Schristos eval_op_f_cmplx>; 289*6881a400Schristos using fortran_cmplx_operation_3arg = fortran_kind_3arg<FORTRAN_CMPLX, 290*6881a400Schristos eval_op_f_cmplx>; 291*6881a400Schristos 292*6881a400Schristos /* OP_RANGE for Fortran. */ 293*6881a400Schristos class fortran_range_operation 294*6881a400Schristos : public tuple_holding_operation<enum range_flag, operation_up, operation_up, 295*6881a400Schristos operation_up> 296*6881a400Schristos { 297*6881a400Schristos public: 298*6881a400Schristos 299*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 300*6881a400Schristos 301*6881a400Schristos value *evaluate (struct type *expect_type, 302*6881a400Schristos struct expression *exp, 303*6881a400Schristos enum noside noside) override 304*6881a400Schristos { 305*6881a400Schristos error (_("ranges not allowed in this context")); 306*6881a400Schristos } 307*6881a400Schristos 308*6881a400Schristos range_flag get_flags () const 309*6881a400Schristos { 310*6881a400Schristos return std::get<0> (m_storage); 311*6881a400Schristos } 312*6881a400Schristos 313*6881a400Schristos value *evaluate0 (struct expression *exp, enum noside noside) const 314*6881a400Schristos { 315*6881a400Schristos return std::get<1> (m_storage)->evaluate (nullptr, exp, noside); 316*6881a400Schristos } 317*6881a400Schristos 318*6881a400Schristos value *evaluate1 (struct expression *exp, enum noside noside) const 319*6881a400Schristos { 320*6881a400Schristos return std::get<2> (m_storage)->evaluate (nullptr, exp, noside); 321*6881a400Schristos } 322*6881a400Schristos 323*6881a400Schristos value *evaluate2 (struct expression *exp, enum noside noside) const 324*6881a400Schristos { 325*6881a400Schristos return std::get<3> (m_storage)->evaluate (nullptr, exp, noside); 326*6881a400Schristos } 327*6881a400Schristos 328*6881a400Schristos enum exp_opcode opcode () const override 329*6881a400Schristos { return OP_RANGE; } 330*6881a400Schristos }; 331*6881a400Schristos 332*6881a400Schristos /* In F77, functions, substring ops and array subscript operations 333*6881a400Schristos cannot be disambiguated at parse time. This operation handles 334*6881a400Schristos both, deciding which do to at evaluation time. */ 335*6881a400Schristos class fortran_undetermined 336*6881a400Schristos : public tuple_holding_operation<operation_up, std::vector<operation_up>> 337*6881a400Schristos { 338*6881a400Schristos public: 339*6881a400Schristos 340*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 341*6881a400Schristos 342*6881a400Schristos value *evaluate (struct type *expect_type, 343*6881a400Schristos struct expression *exp, 344*6881a400Schristos enum noside noside) override; 345*6881a400Schristos 346*6881a400Schristos enum exp_opcode opcode () const override 347*6881a400Schristos { return OP_F77_UNDETERMINED_ARGLIST; } 348*6881a400Schristos 349*6881a400Schristos private: 350*6881a400Schristos 351*6881a400Schristos value *value_subarray (value *array, struct expression *exp, 352*6881a400Schristos enum noside noside); 353*6881a400Schristos }; 354*6881a400Schristos 355*6881a400Schristos /* Single-argument form of Fortran ubound/lbound intrinsics. */ 356*6881a400Schristos class fortran_bound_1arg 357*6881a400Schristos : public tuple_holding_operation<exp_opcode, operation_up> 358*6881a400Schristos { 359*6881a400Schristos public: 360*6881a400Schristos 361*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 362*6881a400Schristos 363*6881a400Schristos value *evaluate (struct type *expect_type, 364*6881a400Schristos struct expression *exp, 365*6881a400Schristos enum noside noside) override; 366*6881a400Schristos 367*6881a400Schristos enum exp_opcode opcode () const override 368*6881a400Schristos { return std::get<0> (m_storage); } 369*6881a400Schristos }; 370*6881a400Schristos 371*6881a400Schristos /* Two-argument form of Fortran ubound/lbound intrinsics. */ 372*6881a400Schristos class fortran_bound_2arg 373*6881a400Schristos : public tuple_holding_operation<exp_opcode, operation_up, operation_up> 374*6881a400Schristos { 375*6881a400Schristos public: 376*6881a400Schristos 377*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 378*6881a400Schristos 379*6881a400Schristos value *evaluate (struct type *expect_type, 380*6881a400Schristos struct expression *exp, 381*6881a400Schristos enum noside noside) override; 382*6881a400Schristos 383*6881a400Schristos enum exp_opcode opcode () const override 384*6881a400Schristos { return std::get<0> (m_storage); } 385*6881a400Schristos }; 386*6881a400Schristos 387*6881a400Schristos /* Three-argument form of Fortran ubound/lbound intrinsics. */ 388*6881a400Schristos class fortran_bound_3arg 389*6881a400Schristos : public tuple_holding_operation<exp_opcode, operation_up, operation_up, 390*6881a400Schristos type *> 391*6881a400Schristos { 392*6881a400Schristos public: 393*6881a400Schristos 394*6881a400Schristos using tuple_holding_operation::tuple_holding_operation; 395*6881a400Schristos 396*6881a400Schristos value *evaluate (type *expect_type, expression *exp, noside noside) override; 397*6881a400Schristos 398*6881a400Schristos exp_opcode opcode () const override 399*6881a400Schristos { return std::get<0> (m_storage); } 400*6881a400Schristos }; 401*6881a400Schristos 402*6881a400Schristos /* Implement STRUCTOP_STRUCT for Fortran. */ 403*6881a400Schristos class fortran_structop_operation 404*6881a400Schristos : public structop_base_operation 405*6881a400Schristos { 406*6881a400Schristos public: 407*6881a400Schristos 408*6881a400Schristos using structop_base_operation::structop_base_operation; 409*6881a400Schristos 410*6881a400Schristos value *evaluate (struct type *expect_type, 411*6881a400Schristos struct expression *exp, 412*6881a400Schristos enum noside noside) override; 413*6881a400Schristos 414*6881a400Schristos enum exp_opcode opcode () const override 415*6881a400Schristos { return STRUCTOP_STRUCT; } 416*6881a400Schristos }; 417*6881a400Schristos 418*6881a400Schristos } /* namespace expr */ 419*6881a400Schristos 420*6881a400Schristos #endif /* FORTRAN_EXP_H */ 421