Use gdb::array_view for value_array

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>
This commit is contained in:
Tom Tromey 2023-08-28 12:40:35 -06:00
parent 4fd1ba162e
commit c73556cb0e
4 changed files with 5 additions and 4 deletions

View 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

View 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
{

View 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;

View 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);