[007/203] Split out eval_op_objc_selector

Message ID 20210101214723.1784144-8-tom@tromey.com
State Superseded
Headers show
Series
  • Refactor expressions
Related show

Commit Message

Tom Tromey Jan. 1, 2021, 9:44 p.m.
This splits OP_OBJC_SELECTOR into a new function for future use.

gdb/ChangeLog
2021-01-01  Tom Tromey  <tom@tromey.com>

	* eval.c (eval_op_objc_selector): New function.
	(evaluate_subexp_standard): Use it.
---
 gdb/ChangeLog |  5 +++++
 gdb/eval.c    | 21 ++++++++++++++-------
 2 files changed, 19 insertions(+), 7 deletions(-)

-- 
2.26.2

Patch

diff --git a/gdb/eval.c b/gdb/eval.c
index 3bdc2094d49..ebab2c8fdbb 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -1283,6 +1283,19 @@  eval_op_string (struct type *expect_type, struct expression *exp,
   return value_string (string, len, type);
 }
 
+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,
@@ -1566,18 +1579,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: