aboutsummaryrefslogtreecommitdiff
path: root/gdb/eval.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2024-09-18 10:25:13 -0600
committerTom Tromey <tromey@adacore.com>2024-10-01 13:25:25 -0600
commit1ce23123912f1d6311e00643729233bbd28b9470 (patch)
treec42e82af599d793ee7eb9b51431ba235c18ea6e8 /gdb/eval.c
parentc5c85987434f5faee54d05547a47ab7748d1eb0f (diff)
downloadgdb-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.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gdb/eval.c b/gdb/eval.c
index bbf4375..3929282 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -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 *