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:27:58 -0700 |
commit | f871bae1ae5fba3dfbc31e1a6136b6c5ab6a6291 (patch) | |
tree | 8c42aeb316f00ec11b6957868c9ddc1e161937aa /gdb/eval.c | |
parent | 14a1c64a139777db0c20c1017e5fecdf3b3db5ac (diff) | |
download | binutils-f871bae1ae5fba3dfbc31e1a6136b6c5ab6a6291.zip binutils-f871bae1ae5fba3dfbc31e1a6136b6c5ab6a6291.tar.gz binutils-f871bae1ae5fba3dfbc31e1a6136b6c5ab6a6291.tar.bz2 |
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 <tom@tromey.com>
* eval.c (eval_op_objc_selector): New function.
(evaluate_subexp_standard): Use it.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -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: |