[v3,045/206] Change parameters to rust_range

Message ID 20210220201609.838264-46-tom@tromey.com
State New
Headers show
Series
  • Refactor expressions
Related show

Commit Message

Tom Tromey Feb. 20, 2021, 8:13 p.m.
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-02-20  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(-)

-- 
2.26.2

Patch

diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 80f1f59dd64..329e00d9497 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: