Use gdb::array_view for value_array
authorTom Tromey <tromey@adacore.com>
Mon, 28 Aug 2023 18:40:35 +0000 (12:40 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 29 Aug 2023 19:36:55 +0000 (13:36 -0600)
This changes value_array to accept an array view.  I also replaced an
alloca with a std::vector in array_operation::evaluate.  This function
can work on any size of array, so it seems bad to use alloca.

Reviewed-by: John Baldwin <jhb@FreeBSD.org>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/eval.c
gdb/rust-lang.c
gdb/valops.c
gdb/value.h

index 457a6697923f8b5bb16d31e1f928b1a76a478daa..00b9231a5b97600d0d60678ec8d9db4a678e1283 100644 (file)
@@ -2515,7 +2515,7 @@ array_operation::evaluate (struct type *expect_type,
       return set;
     }
 
-  value **argvec = XALLOCAVEC (struct value *, nargs);
+  std::vector<value *> argvec (nargs);
   for (tem = 0; tem < nargs; tem++)
     {
       /* Ensure that array expressions are coerced into pointer
index 5eb33d0d3b73f6e3d323c4580134edf27a4f7c3f..f6e7d25f587210318b3b401f6ddf3a9db1b3442c 100644 (file)
@@ -1344,7 +1344,7 @@ eval_op_rust_array (struct type *expect_type, struct expression *exp,
 
       for (i = 0; i < copies; ++i)
        eltvec[i] = elt;
-      return value_array (0, copies - 1, eltvec.data ());
+      return value_array (0, copies - 1, eltvec);
     }
   else
     {
index ea9d9b38e7438ea18ac0414d7da604175d8abf38..1133049c54af6c2fe23ae2e6bd29c97da958da42 100644 (file)
@@ -1692,7 +1692,8 @@ value_ind (struct value *arg1)
    don't currently enforce any restriction on their types).  */
 
 struct value *
-value_array (int lowbound, int highbound, struct value **elemvec)
+value_array (int lowbound, int highbound,
+            gdb::array_view<struct value *> elemvec)
 {
   int nelem;
   int idx;
index e5c63dccbe21c41bdf6fa72a78c2a43b892978ad..ccf52199146ecf314414c93bde147d14036e0292 100644 (file)
@@ -1226,7 +1226,7 @@ inline struct value *value_string (const char *ptr, ssize_t count,
 }
 
 extern struct value *value_array (int lowbound, int highbound,
-                                 struct value **elemvec);
+                                 gdb::array_view<struct value *> elemvec);
 
 extern struct value *value_concat (struct value *arg1, struct value *arg2);