mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
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:
parent
767c4b92bc
commit
5309ce2f04
@ -10590,10 +10590,10 @@ ada_char_operation::replace (operation_up &&owner,
|
|||||||
|
|
||||||
if (context_type != nullptr && context_type->code () == TYPE_CODE_ENUM)
|
if (context_type != nullptr && context_type->code () == TYPE_CODE_ENUM)
|
||||||
{
|
{
|
||||||
|
LONGEST val = as_longest ();
|
||||||
gdb_assert (result.get () == this);
|
gdb_assert (result.get () == this);
|
||||||
std::get<0> (m_storage) = context_type;
|
std::get<0> (m_storage) = context_type;
|
||||||
std::get<1> (m_storage)
|
std::get<1> (m_storage) = convert_char_literal (context_type, val);
|
||||||
= convert_char_literal (context_type, std::get<1> (m_storage));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -1630,8 +1630,8 @@ long_const_operation::do_generate_ax (struct expression *exp,
|
|||||||
struct axs_value *value,
|
struct axs_value *value,
|
||||||
struct type *cast_type)
|
struct type *cast_type)
|
||||||
{
|
{
|
||||||
gen_int_literal (ax, value, std::get<1> (m_storage),
|
LONGEST val = as_longest ();
|
||||||
std::get<0> (m_storage));
|
gen_int_literal (ax, value, val, std::get<0> (m_storage));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
26
gdb/expop.h
26
gdb/expop.h
@ -274,6 +274,12 @@ check_objfile (ULONGEST val, struct objfile *objfile)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
check_objfile (const gdb_mpz &val, struct objfile *objfile)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static inline bool
|
static inline bool
|
||||||
check_objfile (enum_flags<T> val, struct objfile *objfile)
|
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);
|
struct type *type);
|
||||||
extern void dump_for_expression (struct ui_file *stream, int depth,
|
extern void dump_for_expression (struct ui_file *stream, int depth,
|
||||||
CORE_ADDR addr);
|
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,
|
extern void dump_for_expression (struct ui_file *stream, int depth,
|
||||||
internalvar *ivar);
|
internalvar *ivar);
|
||||||
extern void dump_for_expression (struct ui_file *stream, int depth,
|
extern void dump_for_expression (struct ui_file *stream, int depth,
|
||||||
@ -468,6 +476,12 @@ check_constant (ULONGEST cst)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
check_constant (const gdb_mpz &cst)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
check_constant (struct symbol *sym)
|
check_constant (struct symbol *sym)
|
||||||
{
|
{
|
||||||
@ -665,18 +679,21 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class long_const_operation
|
class long_const_operation
|
||||||
: public tuple_holding_operation<struct type *, LONGEST>
|
: public tuple_holding_operation<struct type *, gdb_mpz>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using tuple_holding_operation::tuple_holding_operation;
|
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,
|
value *evaluate (struct type *expect_type,
|
||||||
struct expression *exp,
|
struct expression *exp,
|
||||||
enum noside noside) override
|
enum noside noside) override
|
||||||
{
|
{
|
||||||
return value_from_longest (std::get<0> (m_storage),
|
return value_from_mpz (std::get<0> (m_storage), std::get<1> (m_storage));
|
||||||
std::get<1> (m_storage));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum exp_opcode opcode () const override
|
enum exp_opcode opcode () const override
|
||||||
@ -687,6 +704,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
LONGEST as_longest () const
|
||||||
|
{ return std::get<1> (m_storage).as_integer_truncate<LONGEST> (); }
|
||||||
|
|
||||||
void do_generate_ax (struct expression *exp,
|
void do_generate_ax (struct expression *exp,
|
||||||
struct agent_expr *ax,
|
struct agent_expr *ax,
|
||||||
struct axs_value *value,
|
struct axs_value *value,
|
||||||
|
@ -108,6 +108,12 @@ dump_for_expression (struct ui_file *stream, int depth, CORE_ADDR addr)
|
|||||||
core_addr_to_string (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
|
void
|
||||||
dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
|
dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user