[binutils-gdb] Split out eval_op_rust_array
Tom Tromey
tromey@sourceware.org
Mon Mar 8 14:49:23 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=051042333d9d7e2622f3825d5cf532676787dd1c
commit 051042333d9d7e2622f3825d5cf532676787dd1c
Author: Tom Tromey <tom@tromey.com>
Date: Mon Mar 8 07:27:57 2021 -0700
Split out eval_op_rust_array
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.
Diff:
---
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 <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.
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<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;
More information about the Gdb-cvs
mailing list