From eed70b1c374ac4155f5d18b87a5a6a74581f2076 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_repeat This splits BINOP_REPEAT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey * eval.c (eval_op_repeat): New function. (evaluate_subexp_standard): Use it. --- gdb/ChangeLog | 5 +++++ gdb/eval.c | 36 +++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6cc372978af..1da2a5c7570 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-08 Tom Tromey + + * eval.c (eval_op_repeat): New function. + (evaluate_subexp_standard): Use it. + 2021-03-08 Tom Tromey * eval.c (eval_op_leq): New function. diff --git a/gdb/eval.c b/gdb/eval.c index 4e02bc0c88b..4ac323e4078 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1729,6 +1729,28 @@ eval_op_leq (struct type *expect_type, struct expression *exp, } } +/* A helper function for BINOP_REPEAT. */ + +static struct value * +eval_op_repeat (struct type *expect_type, struct expression *exp, + enum noside noside, + struct value *arg1, struct value *arg2) +{ + if (noside == EVAL_SKIP) + return eval_skip_value (exp); + struct type *type = check_typedef (value_type (arg2)); + if (type->code () != TYPE_CODE_INT + && type->code () != TYPE_CODE_ENUM) + error (_("Non-integral right operand for \"@\" operator.")); + if (noside == EVAL_AVOID_SIDE_EFFECTS) + { + return allocate_repeat_value (value_type (arg1), + longest_to_int (value_as_long (arg2))); + } + else + return value_repeat (arg1, longest_to_int (value_as_long (arg2))); +} + struct value * evaluate_subexp_standard (struct type *expect_type, struct expression *exp, int *pos, @@ -2570,19 +2592,7 @@ evaluate_subexp_standard (struct type *expect_type, case BINOP_REPEAT: arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (nullptr, exp, pos, noside); - if (noside == EVAL_SKIP) - return eval_skip_value (exp); - type = check_typedef (value_type (arg2)); - if (type->code () != TYPE_CODE_INT - && type->code () != TYPE_CODE_ENUM) - error (_("Non-integral right operand for \"@\" operator.")); - if (noside == EVAL_AVOID_SIDE_EFFECTS) - { - return allocate_repeat_value (value_type (arg1), - longest_to_int (value_as_long (arg2))); - } - else - return value_repeat (arg1, longest_to_int (value_as_long (arg2))); + return eval_op_repeat (expect_type, exp, noside, arg1, arg2); case BINOP_COMMA: evaluate_subexp (nullptr, exp, pos, noside); -- 2.30.2