Split out eval_op_objc_selector
authorTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:27:58 +0000 (07:27 -0700)
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.

gdb/ChangeLog
gdb/eval.c

index d2ee9d47956e30df18bb9c623658c855dc59a2f7..fa52286b6352eba480e635d90fd6571801373738 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * eval.c (eval_op_objc_selector): New function.
+       (evaluate_subexp_standard): Use it.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * eval.c (eval_op_string): New function.
index 1fe254104c7a61a95a2f438bbff01ddb31b652c0..b9437837d9ee9f935aba5bcf91a385e79e42ccd6 100644 (file)
@@ -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: