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

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

* rust-lang.c (eval_op_rust_array): New function.
(rust_evaluate_subexp): Use it.

gdb/ChangeLog
gdb/rust-lang.c

index 797349276d0803e5d7fc6ecfe2d95ac7c554e3e0..afcf9a134c3c1fbe1dfad9861314862d650100f2 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * rust-lang.c (eval_op_rust_array): New function.
+       (rust_evaluate_subexp): Use it.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * rust-lang.c (eval_op_rust_complement): New function.
index 449f14c80f8451b11c6abb4e6b41a7912c90acbe..2653db3026bf06d7e168fc2649f95106a43ef67b 100644 (file)
@@ -1354,6 +1354,34 @@ eval_op_rust_complement (struct type *expect_type, struct expression *exp,
   return value_complement (value);
 }
 
+/* A helper function for OP_ARRAY.  */
+
+static struct value *
+eval_op_rust_array (struct type *expect_type, struct expression *exp,
+                   enum noside noside,
+                   struct value *elt, struct value *ncopies)
+{
+  int copies = value_as_long (ncopies);
+  if (copies < 0)
+    error (_("Array with negative number of elements"));
+
+  if (noside == EVAL_NORMAL)
+    {
+      int i;
+      std::vector<struct value *> eltvec (copies);
+
+      for (i = 0; i < copies; ++i)
+       eltvec[i] = elt;
+      return value_array (0, copies - 1, eltvec.data ());
+    }
+  else
+    {
+      struct type *arraytype
+       = lookup_array_range_type (value_type (elt), 0, copies - 1);
+      return allocate_value (arraytype);
+    }
+}
+
 /* evaluate_exp implementation for Rust.  */
 
 static struct value *
@@ -1472,31 +1500,12 @@ rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
     case OP_RUST_ARRAY:
       {
        (*pos)++;
-       int copies;
        struct value *elt;
        struct value *ncopies;
 
        elt = rust_evaluate_subexp (NULL, exp, pos, noside);
        ncopies = rust_evaluate_subexp (NULL, exp, pos, noside);
-       copies = value_as_long (ncopies);
-       if (copies < 0)
-         error (_("Array with negative number of elements"));
-
-       if (noside == EVAL_NORMAL)
-         {
-           int i;
-           std::vector<struct value *> eltvec (copies);
-
-           for (i = 0; i < copies; ++i)
-             eltvec[i] = elt;
-           result = value_array (0, copies - 1, eltvec.data ());
-         }
-       else
-         {
-           struct type *arraytype
-             = lookup_array_range_type (value_type (elt), 0, copies - 1);
-           result = allocate_value (arraytype);
-         }
+       return eval_op_rust_array (expect_type, exp, noside, elt, ncopies);
       }
       break;