diff options
author | Tom Tromey <tom@tromey.com> | 2021-03-08 07:27:57 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-03-08 07:28:14 -0700 |
commit | d5ab122c48fec1eb617598c02c6efdf9ba1ee23f (patch) | |
tree | 0dd3301e5acbc2e0fe2b8c27d9d7306aba9234b6 /gdb/eval.c | |
parent | cae26a0cb05be806ae97d4fabc1cb8e6773a1512 (diff) | |
download | gdb-d5ab122c48fec1eb617598c02c6efdf9ba1ee23f.zip gdb-d5ab122c48fec1eb617598c02c6efdf9ba1ee23f.tar.gz gdb-d5ab122c48fec1eb617598c02c6efdf9ba1ee23f.tar.bz2 |
Introduce scope_operation
This adds class scope_operation, an implementation of OP_SCOPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* 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.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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. |