From: Tom Tromey Date: Mon, 8 Mar 2021 14:27:57 +0000 (-0700) Subject: Split out eval_op_objc_selector X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f871bae1ae5fba3dfbc31e1a6136b6c5ab6a6291;p=binutils-gdb.git Split out eval_op_objc_selector This splits OP_OBJC_SELECTOR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey * eval.c (eval_op_objc_selector): New function. (evaluate_subexp_standard): Use it. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d2ee9d47956..fa52286b635 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-08 Tom Tromey + + * eval.c (eval_op_objc_selector): New function. + (evaluate_subexp_standard): Use it. + 2021-03-08 Tom Tromey * eval.c (eval_op_string): New function. diff --git a/gdb/eval.c b/gdb/eval.c index 1fe254104c7..b9437837d9e 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1294,6 +1294,21 @@ eval_op_string (struct type *expect_type, struct expression *exp, return value_string (string, len, type); } +/* Helper function that implements the body of OP_OBJC_SELECTOR. */ + +static struct value * +eval_op_objc_selector (struct type *expect_type, struct expression *exp, + enum noside noside, + const char *sel) +{ + if (noside == EVAL_SKIP) + return eval_skip_value (exp); + + struct type *selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr; + return value_from_longest (selector_type, + lookup_child_selector (exp->gdbarch, sel)); +} + struct value * evaluate_subexp_standard (struct type *expect_type, struct expression *exp, int *pos, @@ -1577,18 +1592,12 @@ evaluate_subexp_standard (struct type *expect_type, { /* Objective C @selector operator. */ char *sel = &exp->elts[pc + 2].string; int len = longest_to_int (exp->elts[pc + 1].longconst); - struct type *selector_type; (*pos) += 3 + BYTES_TO_EXP_ELEM (len + 1); - if (noside == EVAL_SKIP) - return eval_skip_value (exp); - if (sel[len] != 0) sel[len] = 0; /* Make sure it's terminated. */ - selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr; - return value_from_longest (selector_type, - lookup_child_selector (exp->gdbarch, sel)); + return eval_op_objc_selector (expect_type, exp, noside, sel); } case OP_OBJC_MSGCALL: