[v3,043/206] Split ot fortran_require_array

Message ID 20210220201609.838264-44-tom@tromey.com
State New
Headers show
Series
  • Refactor expressions
Related show

Commit Message

Tom Tromey Feb. 20, 2021, 8:13 p.m.
This splits out a helper function, fortran_require_array, that will be
used in a later patch.

gdb/ChangeLog
2021-02-20  Tom Tromey  <tom@tromey.com>

	* f-lang.c (fortran_require_array): New function.
	(evaluate_subexp_f): Use it.
---
 gdb/ChangeLog |  5 +++++
 gdb/f-lang.c  | 26 ++++++++++++++++++--------
 2 files changed, 23 insertions(+), 8 deletions(-)

-- 
2.26.2

Patch

diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 3ba67021daf..b5c6499f45e 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -128,6 +128,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
    the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
    array type).  GDBARCH is the current architecture.  */
@@ -1053,14 +1070,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);