Split out eval_op_rust_complement

This splits UNOP_COMPLEMENT into a new function for future use.

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

	* rust-lang.c (eval_op_rust_complement): New function.
	(rust_evaluate_subexp): Use it.
This commit is contained in:
Tom Tromey 2021-03-08 07:27:57 -07:00
parent d123f9e4a3
commit 6fa9831f89
2 changed files with 23 additions and 10 deletions

View file

@ -1337,6 +1337,23 @@ eval_op_rust_ind (struct type *expect_type, struct expression *exp,
return value_ind (value);
}
/* A helper function for UNOP_COMPLEMENT. */
static struct value *
eval_op_rust_complement (struct type *expect_type, struct expression *exp,
enum noside noside,
struct value *value)
{
if (noside == EVAL_SKIP)
{
/* Preserving the type is enough. */
return value;
}
if (value_type (value)->code () == TYPE_CODE_BOOL)
return value_from_longest (value_type (value), value_logical_not (value));
return value_complement (value);
}
/* evaluate_exp implementation for Rust. */
static struct value *
@ -1367,16 +1384,7 @@ rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
++*pos;
value = evaluate_subexp (nullptr, exp, pos, noside);
if (noside == EVAL_SKIP)
{
/* Preserving the type is enough. */
return value;
}
if (value_type (value)->code () == TYPE_CODE_BOOL)
result = value_from_longest (value_type (value),
value_logical_not (value));
else
result = value_complement (value);
result = eval_op_rust_complement (expect_type, exp, noside, value);
}
break;