diff options
author | Tom Tromey <tom@tromey.com> | 2021-03-08 07:27:57 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-03-08 07:28:02 -0700 |
commit | eed70b1c374ac4155f5d18b87a5a6a74581f2076 (patch) | |
tree | d6a32e816366f74f671223cb5021cd4624f92570 /gdb/eval.c | |
parent | 60cdd4871ac9c9e0118cd47c7fce36cd5163404a (diff) | |
download | binutils-gdb-eed70b1c374ac4155f5d18b87a5a6a74581f2076.tar.gz |
Split out eval_op_repeat
This splits BINOP_REPEAT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_repeat): New function.
(evaluate_subexp_standard): Use it.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 36 |
1 files changed, 23 insertions, 13 deletions
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); |