[045/203] Change parameters to rust_subscript

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

Commit Message

Tom Tromey Jan. 1, 2021, 9:44 p.m.
This changes the parameters to rust_subscript, making it more suitable
for reuse by the (coming) new expression code.  In particular,
rust_subscript no longer evaluates its subexpressions.  Instead, they
are passed in.

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

	* rust-lang.c (rust_subscript): Change parameters.
	(rust_evaluate_subexp): Update.
---
 gdb/ChangeLog   |  5 +++++
 gdb/rust-lang.c | 24 +++++++++++++++---------
 2 files changed, 20 insertions(+), 9 deletions(-)

-- 
2.26.2

Patch

diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index c460d03172e..a635c8b8449 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -1168,10 +1168,11 @@  rust_compute_range (struct type *type, struct value *range,
 /* A helper for rust_evaluate_subexp that handles BINOP_SUBSCRIPT.  */
 
 static struct value *
-rust_subscript (struct expression *exp, int *pos, enum noside noside,
-		int for_addr)
+rust_subscript (struct type *expect_type, struct expression *exp,
+		enum noside noside, bool for_addr,
+		struct value *lhs, struct value *rhs)
 {
-  struct value *lhs, *rhs, *result;
+  struct value *result;
   struct type *rhstype;
   LONGEST low, high_bound;
   /* Initialized to appease the compiler.  */
@@ -1179,10 +1180,6 @@  rust_subscript (struct expression *exp, int *pos, enum noside noside,
   LONGEST high = 0;
   int want_slice = 0;
 
-  ++*pos;
-  lhs = evaluate_subexp (nullptr, exp, pos, noside);
-  rhs = evaluate_subexp (nullptr, exp, pos, noside);
-
   if (noside == EVAL_SKIP)
     return lhs;
 
@@ -1374,7 +1371,12 @@  rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
       break;
 
     case BINOP_SUBSCRIPT:
-      result = rust_subscript (exp, pos, noside, 0);
+      {
+	++*pos;
+	struct value *lhs = evaluate_subexp (nullptr, exp, pos, noside);
+	struct value *rhs = evaluate_subexp (nullptr, exp, pos, noside);
+	result = rust_subscript (expect_type, exp, noside, false, lhs, rhs);
+      }
       break;
 
     case OP_FUNCALL:
@@ -1628,7 +1630,11 @@  tuple structs, and tuple-like enum variants"));
       if (exp->elts[*pos + 1].opcode == BINOP_SUBSCRIPT)
 	{
 	  ++*pos;
-	  result = rust_subscript (exp, pos, noside, 1);
+	  ++*pos;
+	  struct value *lhs = evaluate_subexp (nullptr, exp, pos, noside);
+	  struct value *rhs = evaluate_subexp (nullptr, exp, pos, noside);
+
+	  result = rust_subscript (expect_type, exp, noside, true, lhs, rhs);
 	  break;
 	}
       /* Fall through.  */