Split out fortran_require_array
authorTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:28:06 +0000 (07:28 -0700)
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.

gdb/ChangeLog
gdb/f-lang.c

index 0958f593c91ff44e0c6dba965d8e2617776ce33e..6450bbe05f57398e1ba43200a8b498471a4e7aea 100644 (file)
@@ -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>
 
        * f-lang.c (eval_op_f_kind): New function.
index 659b0c84fa88550799e9b6103f0f03eb696cd558..0ee2806f1a1e3841826c85c1db9cb0a627a509fb 100644 (file)
@@ -130,6 +130,23 @@ const struct op_print f_language::op_print_tab[] =
 };
 \f
 
+/* 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
    the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
    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.  */
        arg1 = evaluate_subexp (nullptr, exp, pos, noside);
-       type = check_typedef (value_type (arg1));
-       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"));
-         }
+       fortran_require_array (value_type (arg1), lbound_p);
 
        if (nargs == 1)
          return fortran_bounds_all_dims (lbound_p, exp->gdbarch, arg1);