diff options
author | Tom Tromey <tromey@adacore.com> | 2024-09-18 10:25:13 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-10-01 13:25:25 -0600 |
commit | 1ce23123912f1d6311e00643729233bbd28b9470 (patch) | |
tree | c42e82af599d793ee7eb9b51431ba235c18ea6e8 /gdb/eval.c | |
parent | c5c85987434f5faee54d05547a47ab7748d1eb0f (diff) | |
download | gdb-1ce23123912f1d6311e00643729233bbd28b9470.zip gdb-1ce23123912f1d6311e00643729233bbd28b9470.tar.gz gdb-1ce23123912f1d6311e00643729233bbd28b9470.tar.bz2 |
Introduce and use operation::type_p
There's currently code in gdb that checks if an expression evaluates
to a type. In some spots this is done by comparing the opcode against
OP_TYPE, but other spots more correctly also compare with OP_TYPEOF
and OP_DECLTYPE.
This patch cleans up this area, replacing opcode-checking with a new
method on 'operation'.
Generally, checking the opcode should be considered deprecated,
although it's unfortunately difficult to get rid of opcodes entirely.
I also took advantage of this change to turn eval_op_type into a
method, removing a bit of indirection.
Reviewed-by: Keith Seitz <keiths@redhat.com>
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -1872,18 +1872,21 @@ eval_op_postdec (struct type *expect_type, struct expression *exp, } } -/* A helper function for OP_TYPE. */ +namespace expr +{ struct value * -eval_op_type (struct type *expect_type, struct expression *exp, - enum noside noside, struct type *type) +type_operation::evaluate (struct type *expect_type, struct expression *exp, + enum noside noside) { if (noside == EVAL_AVOID_SIDE_EFFECTS) - return value::allocate (type); + return value::allocate (std::get<0> (m_storage)); else error (_("Attempt to use a type name as an expression")); } +} + /* A helper function for BINOP_ASSIGN_MODIFY. */ struct value * |