From 6fa9831f89a3c788f4ea1ab6d1e2543dabfc0f8e Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 8 Mar 2021 07:27:57 -0700 Subject: [PATCH] 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. --- gdb/ChangeLog | 5 +++++ gdb/rust-lang.c | 28 ++++++++++++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) 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; -- 2.30.2