[PATCH 044/203] Change parameters to rust_range

Tom Tromey
2021-01-01T21:48:01Z

This changes the parameters to rust_range, making it more suitable for
reuse by the (coming) new expression code. In particular, rust_range
no longer evaluates its subexpressions. Instead, they are passed in.

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

* rust-lang.c (rust_range): Change parameters.
(rust_evaluate_subexp): Update.
---
gdb/ChangeLog | 5 +++++
gdb/rust-lang.c | 27 ++++++++++++++++-----------
2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index e9827ff15f7..c460d03172e 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -1041,9 +1041,10 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
/* A helper for rust_evaluate_subexp that handles OP_RANGE. */

static struct value *
-rust_range (struct expression *exp, int *pos, enum noside noside)
+rust_range (struct type *expect_type, struct expression *exp,
+ enum noside noside, enum range_flag kind,
+ struct value *low, struct value *high)
{
- struct value *low = NULL, *high = NULL;
struct value *addrval, *result;
CORE_ADDR addr;
struct type *range_type;
@@ -1051,14 +1052,6 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
struct type *temp_type;
const char *name;

- auto kind
- = (enum range_flag) longest_to_int (exp->elts[*pos + 1].longconst);
- *pos += 3;
-
- if (!(kind & RANGE_LOW_BOUND_DEFAULT))
- low = evaluate_subexp (nullptr, exp, pos, noside);
- if (!(kind & RANGE_HIGH_BOUND_DEFAULT))
- high = evaluate_subexp (nullptr, exp, pos, noside);
bool inclusive = !(kind & RANGE_HIGH_BOUND_EXCLUSIVE);

if (noside == EVAL_SKIP)
@@ -1614,7 +1607,19 @@ tuple structs, and tuple-like enum variants"));
break;

case OP_RANGE:
- result = rust_range (exp, pos, noside);
+ {
+ struct value *low = NULL, *high = NULL;
+ auto kind
+ = (enum range_flag) longest_to_int (exp->elts[*pos + 1].longconst);
+ *pos += 3;
+
+ if (!(kind & RANGE_LOW_BOUND_DEFAULT))
+ low = evaluate_subexp (nullptr, exp, pos, noside);
+ if (!(kind & RANGE_HIGH_BOUND_DEFAULT))
+ high = evaluate_subexp (nullptr, exp, pos, noside);
+
+ result = rust_range (expect_type, exp, noside, kind, low, high);
+ }
break;

case UNOP_ADDR:
--
2.26.2