From: Tom Tromey Date: Mon, 8 Mar 2021 14:27:57 +0000 (-0700) Subject: Introduce float_const_operation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cae26a0cb05be806ae97d4fabc1cb8e6773a1512;p=binutils-gdb.git Introduce float_const_operation This adds class float_const_operation, an operation holding a floating-point constant. Unlike most other new operations, this one requires a custom 'dump' method. gdb/ChangeLog 2021-03-08 Tom Tromey * expprint.c (float_const_operation::dump): New method. * expop.h (float_data): New typedef. (class float_const_operation): New. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2b90a32e749..036e5625253 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-03-08 Tom Tromey + + * expprint.c (float_const_operation::dump): New method. + * expop.h (float_data): New typedef. + (class float_const_operation): New. + 2021-03-08 Tom Tromey * expop.h (gen_expr_binop, gen_expr_structop): Declare. diff --git a/gdb/expop.h b/gdb/expop.h index 1bf06139dfb..1e58262e876 100644 --- a/gdb/expop.h +++ b/gdb/expop.h @@ -373,6 +373,48 @@ private: } }; +/* A floating-point constant. The constant is encoded in the target + format. */ + +typedef std::array float_data; + +/* An operation that holds a floating-point constant of a given + type. + + This does not need the facilities provided by + tuple_holding_operation, so it does not use it. */ +class float_const_operation + : public operation +{ +public: + + float_const_operation (struct type *type, float_data data) + : m_type (type), + m_data (data) + { + } + + value *evaluate (struct type *expect_type, + struct expression *exp, + enum noside noside) override + { + return value_from_contents (m_type, m_data.data ()); + } + + enum exp_opcode opcode () const override + { return OP_FLOAT; } + + bool constant_p () const override + { return true; } + + void dump (struct ui_file *stream, int depth) const override; + +private: + + struct type *m_type; + float_data m_data; +}; + } /* namespace expr */ #endif /* EXPOP_H */ diff --git a/gdb/expprint.c b/gdb/expprint.c index 92f12999472..5826108c1c9 100644 --- a/gdb/expprint.c +++ b/gdb/expprint.c @@ -1283,4 +1283,12 @@ dump_for_expression (struct ui_file *stream, int depth, fprintf_filtered (stream, "\n"); } +void +float_const_operation::dump (struct ui_file *stream, int depth) const +{ + fprintf_filtered (stream, _("%*sFloat: "), depth, ""); + print_floating (m_data.data (), m_type, stream); + fprintf_filtered (stream, "\n"); +} + } /* namespace expr */