From d5ab122c48fec1eb617598c02c6efdf9ba1ee23f Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 8 Mar 2021 07:27:57 -0700 Subject: Introduce scope_operation This adds class scope_operation, an implementation of OP_SCOPE. gdb/ChangeLog 2021-03-08 Tom Tromey * expop.h (class scope_operation): New. * eval.c (eval_op_scope): No longer static. (scope_operation::evaluate_for_address): New method. * ax-gdb.c (scope_operation::do_generate_ax): New method. --- gdb/eval.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'gdb/eval.c') diff --git a/gdb/eval.c b/gdb/eval.c index 8adbcef..452f088 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1185,7 +1185,7 @@ is_integral_or_integral_reference (struct type *type) /* Helper function that implements the body of OP_SCOPE. */ -static struct value * +struct value * eval_op_scope (struct type *expect_type, struct expression *exp, enum noside noside, struct type *type, const char *string) @@ -3289,6 +3289,18 @@ operation::evaluate_for_address (struct expression *exp, enum noside noside) return evaluate_subexp_for_address_base (exp, noside, val); } +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 ()); + return x; +} + } /* Evaluate like `evaluate_subexp' except coercing arrays to pointers. -- cgit v1.1