mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
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 <tom@tromey.com> * expprint.c (float_const_operation::dump): New method. * expop.h (float_data): New typedef. (class float_const_operation): New.
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* expprint.c (float_const_operation::dump): New method.
|
||||
* expop.h (float_data): New typedef.
|
||||
(class float_const_operation): New.
|
||||
|
||||
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* expop.h (gen_expr_binop, gen_expr_structop): Declare.
|
||||
|
42
gdb/expop.h
42
gdb/expop.h
@ -373,6 +373,48 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
/* A floating-point constant. The constant is encoded in the target
|
||||
format. */
|
||||
|
||||
typedef std::array<gdb_byte, 16> 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 */
|
||||
|
@ -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 */
|
||||
|
Reference in New Issue
Block a user