From: Tom Tromey Date: Mon, 8 Mar 2021 14:27:57 +0000 (-0700) Subject: Split out eval_op_rust_complement X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6fa9831f89a3c788f4ea1ab6d1e2543dabfc0f8e;p=binutils-gdb.git Split out eval_op_rust_complement This splits UNOP_COMPLEMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey * rust-lang.c (eval_op_rust_complement): New function. (rust_evaluate_subexp): Use it. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 22c017f0ef0..797349276d0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-08 Tom Tromey + + * rust-lang.c (eval_op_rust_complement): New function. + (rust_evaluate_subexp): Use it. + 2021-03-08 Tom Tromey * rust-lang.c (eval_op_rust_ind): New function. diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 173b418e2f5..449f14c80f8 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -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;