Convert long_const_operation to use gdb_mpz

This changes long_const_operation to use gdb_mpz for its storage.
This commit is contained in:
Tom Tromey 2023-03-27 12:54:51 -06:00
parent 767c4b92bc
commit 5309ce2f04
4 changed files with 33 additions and 7 deletions

View File

@ -10590,10 +10590,10 @@ ada_char_operation::replace (operation_up &&owner,
if (context_type != nullptr && context_type->code () == TYPE_CODE_ENUM)
{
LONGEST val = as_longest ();
gdb_assert (result.get () == this);
std::get<0> (m_storage) = context_type;
std::get<1> (m_storage)
= convert_char_literal (context_type, std::get<1> (m_storage));
std::get<1> (m_storage) = convert_char_literal (context_type, val);
}
return result;

View File

@ -1630,8 +1630,8 @@ long_const_operation::do_generate_ax (struct expression *exp,
struct axs_value *value,
struct type *cast_type)
{
gen_int_literal (ax, value, std::get<1> (m_storage),
std::get<0> (m_storage));
LONGEST val = as_longest ();
gen_int_literal (ax, value, val, std::get<0> (m_storage));
}
void

View File

@ -274,6 +274,12 @@ check_objfile (ULONGEST val, struct objfile *objfile)
return false;
}
static inline bool
check_objfile (const gdb_mpz &val, struct objfile *objfile)
{
return false;
}
template<typename T>
static inline bool
check_objfile (enum_flags<T> val, struct objfile *objfile)
@ -319,6 +325,8 @@ extern void dump_for_expression (struct ui_file *stream, int depth,
struct type *type);
extern void dump_for_expression (struct ui_file *stream, int depth,
CORE_ADDR addr);
extern void dump_for_expression (struct ui_file *stream, int depth,
const gdb_mpz &addr);
extern void dump_for_expression (struct ui_file *stream, int depth,
internalvar *ivar);
extern void dump_for_expression (struct ui_file *stream, int depth,
@ -468,6 +476,12 @@ check_constant (ULONGEST cst)
return true;
}
static inline bool
check_constant (const gdb_mpz &cst)
{
return true;
}
static inline bool
check_constant (struct symbol *sym)
{
@ -665,18 +679,21 @@ protected:
};
class long_const_operation
: public tuple_holding_operation<struct type *, LONGEST>
: public tuple_holding_operation<struct type *, gdb_mpz>
{
public:
using tuple_holding_operation::tuple_holding_operation;
long_const_operation (struct type *type, LONGEST val)
: long_const_operation (type, gdb_mpz (val))
{ }
value *evaluate (struct type *expect_type,
struct expression *exp,
enum noside noside) override
{
return value_from_longest (std::get<0> (m_storage),
std::get<1> (m_storage));
return value_from_mpz (std::get<0> (m_storage), std::get<1> (m_storage));
}
enum exp_opcode opcode () const override
@ -687,6 +704,9 @@ public:
protected:
LONGEST as_longest () const
{ return std::get<1> (m_storage).as_integer_truncate<LONGEST> (); }
void do_generate_ax (struct expression *exp,
struct agent_expr *ax,
struct axs_value *value,

View File

@ -108,6 +108,12 @@ dump_for_expression (struct ui_file *stream, int depth, CORE_ADDR addr)
core_addr_to_string (addr));
}
void
dump_for_expression (struct ui_file *stream, int depth, const gdb_mpz &val)
{
gdb_printf (stream, _("%*sConstant: %s\n"), depth, "", val.str ().c_str ());
}
void
dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
{