Change parameters to rust_subscript
authorTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:28:07 +0000 (07:28 -0700)
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-03-08  Tom Tromey  <tom@tromey.com>

* rust-lang.c (rust_subscript): Change parameters.
(rust_evaluate_subexp): Update.

gdb/ChangeLog
gdb/rust-lang.c

index 407344bedaf074d76db17d1314119f3ef9d30013..7849e59be33f8a77d1d2ac0491b0784e9d8d5455 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * rust-lang.c (rust_subscript): Change parameters.
+       (rust_evaluate_subexp): Update.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * rust-lang.c (rust_range): Change parameters.
index 329e00d9497eef0e2f5e856b88db51a7ebbf331f..5a937d95efae8b62ae3881efc277570ede4b2da0 100644 (file)
@@ -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.  */