From 051042333d9d7e2622f3825d5cf532676787dd1c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 8 Mar 2021 07:27:57 -0700 Subject: [PATCH] Split out eval_op_rust_array This splits OP_ARRAY into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey * rust-lang.c (eval_op_rust_array): New function. (rust_evaluate_subexp): Use it. --- gdb/ChangeLog | 5 +++++ gdb/rust-lang.c | 49 +++++++++++++++++++++++++++++-------------------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 797349276d0..afcf9a134c3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-08 Tom Tromey + + * rust-lang.c (eval_op_rust_array): New function. + (rust_evaluate_subexp): Use it. + 2021-03-08 Tom Tromey * rust-lang.c (eval_op_rust_complement): New function. diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 449f14c80f8..2653db3026b 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -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 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 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; -- 2.30.2