diff options
author | Tom Tromey <tom@tromey.com> | 2025-03-09 15:30:45 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2025-03-10 13:23:57 -0600 |
commit | eb39f6d01e7c74389e71a864f382a2f0d3560cfd (patch) | |
tree | aa80cfde56a3a94ea797ebaa492a7dad40a6d90c | |
parent | cc0fdf9861088cda915dc4a5b60132f67ef3d8db (diff) | |
download | binutils-eb39f6d01e7c74389e71a864f382a2f0d3560cfd.zip binutils-eb39f6d01e7c74389e71a864f382a2f0d3560cfd.tar.gz binutils-eb39f6d01e7c74389e71a864f382a2f0d3560cfd.tar.bz2 |
Remove eval_op_scope
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>
-rw-r--r-- | gdb/eval.c | 32 | ||||
-rw-r--r-- | gdb/expop.h | 18 |
2 files changed, 20 insertions, 30 deletions
@@ -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; } diff --git a/gdb/expop.h b/gdb/expop.h index a7b2c1b..580a71e 100644 --- a/gdb/expop.h +++ b/gdb/expop.h @@ -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. */ |