Change parameters to rust_subscript
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.
This commit is contained in:
parent
d148f80354
commit
984af2cb26
2 changed files with 20 additions and 9 deletions
|
@ -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. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue