Split out fortran_require_array
This splits out a helper function, fortran_require_array, that will be used in a later patch. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (fortran_require_array): New function. (evaluate_subexp_f): Use it.
This commit is contained in:
parent
216f6fcbef
commit
3c18c49c63
2 changed files with 23 additions and 8 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* f-lang.c (fortran_require_array): New function.
|
||||||
|
(evaluate_subexp_f): Use it.
|
||||||
|
|
||||||
2021-03-08 Tom Tromey <tom@tromey.com>
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* f-lang.c (eval_op_f_kind): New function.
|
* f-lang.c (eval_op_f_kind): New function.
|
||||||
|
|
26
gdb/f-lang.c
26
gdb/f-lang.c
|
@ -130,6 +130,23 @@ const struct op_print f_language::op_print_tab[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* A helper function for the "bound" intrinsics that checks that TYPE
|
||||||
|
is an array. LBOUND_P is true for lower bound; this is used for
|
||||||
|
the error message, if any. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
fortran_require_array (struct type *type, bool lbound_p)
|
||||||
|
{
|
||||||
|
type = check_typedef (type);
|
||||||
|
if (type->code () != TYPE_CODE_ARRAY)
|
||||||
|
{
|
||||||
|
if (lbound_p)
|
||||||
|
error (_("LBOUND can only be applied to arrays"));
|
||||||
|
else
|
||||||
|
error (_("UBOUND can only be applied to arrays"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Create an array containing the lower bounds (when LBOUND_P is true) or
|
/* Create an array containing the lower bounds (when LBOUND_P is true) or
|
||||||
the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
|
the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
|
||||||
array type). GDBARCH is the current architecture. */
|
array type). GDBARCH is the current architecture. */
|
||||||
|
@ -1228,14 +1245,7 @@ evaluate_subexp_f (struct type *expect_type, struct expression *exp,
|
||||||
|
|
||||||
/* Check that the first argument is array like. */
|
/* Check that the first argument is array like. */
|
||||||
arg1 = evaluate_subexp (nullptr, exp, pos, noside);
|
arg1 = evaluate_subexp (nullptr, exp, pos, noside);
|
||||||
type = check_typedef (value_type (arg1));
|
fortran_require_array (value_type (arg1), lbound_p);
|
||||||
if (type->code () != TYPE_CODE_ARRAY)
|
|
||||||
{
|
|
||||||
if (lbound_p)
|
|
||||||
error (_("LBOUND can only be applied to arrays"));
|
|
||||||
else
|
|
||||||
error (_("UBOUND can only be applied to arrays"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nargs == 1)
|
if (nargs == 1)
|
||||||
return fortran_bounds_all_dims (lbound_p, exp->gdbarch, arg1);
|
return fortran_bounds_all_dims (lbound_p, exp->gdbarch, arg1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue