]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove eval_op_scope
authorTom Tromey <tom@tromey.com>
Sun, 9 Mar 2025 21:30:45 +0000 (15:30 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 10 Mar 2025 19:23:57 +0000 (13:23 -0600)
eval_op_scope is very similar to
scope_operation::evaluate_for_address.  This patch combines the two
into a single method of scope_operation.

Regression tested on x86-64 Fedora 40.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/eval.c
gdb/expop.h

index 457a4362289dac383be28d352b3a714587344029..63961cc43496127c64e38762452a03eae4649876 100644 (file)
@@ -1071,20 +1071,6 @@ is_integral_or_integral_reference (struct type *type)
          && is_integral_type (type->target_type ()));
 }
 
-/* Helper function that implements the body of OP_SCOPE.  */
-
-struct value *
-eval_op_scope (struct type *expect_type, struct expression *exp,
-              enum noside noside,
-              struct type *type, const char *string)
-{
-  struct value *arg1 = value_aggregate_elt (type, string, expect_type,
-                                           0, noside);
-  if (arg1 == NULL)
-    error (_("There is no field named %s"), string);
-  return arg1;
-}
-
 /* Helper function that implements the body of OP_VAR_ENTRY_VALUE.  */
 
 struct value *
@@ -2615,14 +2601,16 @@ operation::evaluate_for_address (struct expression *exp, enum noside noside)
 }
 
 value *
-scope_operation::evaluate_for_address (struct expression *exp,
-                                      enum noside noside)
-{
-  value *x = value_aggregate_elt (std::get<0> (m_storage),
-                                 std::get<1> (m_storage).c_str (),
-                                 NULL, 1, noside);
-  if (x == NULL)
-    error (_("There is no field named %s"), std::get<1> (m_storage).c_str ());
+scope_operation::evaluate_internal (struct type *expect_type,
+                                   struct expression *exp,
+                                   enum noside noside,
+                                   bool want_address)
+{
+  const char *string = std::get<1> (m_storage).c_str ();
+  value *x = value_aggregate_elt (std::get<0> (m_storage), string,
+                                 expect_type, want_address, noside);
+  if (x == nullptr)
+    error (_("There is no field named %s"), string);
   return x;
 }
 
index a7b2c1bf6274a84eb203d62bf56dc85459d3cca3..580a71e94297e8a10ff90be6a5a249e18b23c5be 100644 (file)
@@ -45,10 +45,6 @@ extern void gen_expr_unop (struct expression *exp,
                           expr::operation *lhs,
                           struct agent_expr *ax, struct axs_value *value);
 
-extern struct value *eval_op_scope (struct type *expect_type,
-                                   struct expression *exp,
-                                   enum noside noside,
-                                   struct type *type, const char *string);
 extern struct value *eval_op_var_msym_value (struct type *expect_type,
                                             struct expression *exp,
                                             enum noside noside,
@@ -600,13 +596,14 @@ public:
                   struct expression *exp,
                   enum noside noside) override
   {
-    return eval_op_scope (expect_type, exp, noside,
-                         std::get<0> (m_storage),
-                         std::get<1> (m_storage).c_str ());
+    return evaluate_internal (expect_type, exp, noside, false);
   }
 
   value *evaluate_for_address (struct expression *exp,
-                              enum noside noside) override;
+                              enum noside noside) override
+  {
+    return evaluate_internal (nullptr, exp, noside, true);
+  }
 
   value *evaluate_funcall (struct type *expect_type,
                           struct expression *exp,
@@ -623,6 +620,11 @@ protected:
                       struct axs_value *value,
                       struct type *cast_type)
     override;
+
+private:
+
+  value *evaluate_internal (struct type *expect_type, struct expression *exp,
+                           enum noside noside, bool want_address);
 };
 
 /* Compute the value of a variable.  */