Split out eval_op_m2_high
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:09 +0000 (07:28 -0700)
This splits UNOP_HIGH into a new function for future use.

gdb/ChangeLog
2021-03-08  Tom Tromey  <tom@tromey.com>

* m2-lang.c (eval_op_m2_high): New function.
(evaluate_subexp_modula2): Use it.

gdb/ChangeLog
gdb/m2-lang.c

index 0f3967ffae57400ad778973f031a0ac148096f15..582408f7537477d9a5c8b89299912cef96082b78 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * m2-lang.c (eval_op_m2_high): New function.
+       (evaluate_subexp_modula2): Use it.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * eval.c (evaluate_subexp_for_address_base): New function.
index fb49ba470d6f850978d2b129d75647330bb8cd79..b0dafad8d33333497efa8a56405b59780fa4fea5 100644 (file)
 #include "valprint.h"
 #include "gdbarch.h"
 
+/* A helper function for UNOP_HIGH.  */
+
+static struct value *
+eval_op_m2_high (struct type *expect_type, struct expression *exp,
+                enum noside noside,
+                struct value *arg1)
+{
+  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else
+    {
+      arg1 = coerce_ref (arg1);
+      struct type *type = check_typedef (value_type (arg1));
+
+      if (m2_is_unbounded_array (type))
+       {
+         struct value *temp = arg1;
+
+         type = type->field (1).type ();
+         /* i18n: Do not translate the "_m2_high" part!  */
+         arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,
+                                  _("unbounded structure "
+                                    "missing _m2_high field"));
+
+         if (value_type (arg1) != type)
+           arg1 = value_cast (type, arg1);
+       }
+    }
+  return arg1;
+}
+
 static struct value *
 evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
                         int *pos, enum noside noside)
@@ -43,29 +74,7 @@ evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
     case UNOP_HIGH:
       (*pos)++;
       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-       return arg1;
-      else
-       {
-         arg1 = coerce_ref (arg1);
-         type = check_typedef (value_type (arg1));
-
-         if (m2_is_unbounded_array (type))
-           {
-             struct value *temp = arg1;
-
-             type = type->field (1).type ();
-             /* i18n: Do not translate the "_m2_high" part!  */
-             arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,
-                                      _("unbounded structure "
-                                        "missing _m2_high field"));
-         
-             if (value_type (arg1) != type)
-               arg1 = value_cast (type, arg1);
-           }
-       }
-      return arg1;
+      return eval_op_m2_high (expect_type, exp, noside, arg1);
 
     case BINOP_SUBSCRIPT:
       (*pos)++;