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;
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
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)
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,
return true;
}
+static inline bool
+check_constant (const gdb_mpz &cst)
+{
+ return true;
+}
+
static inline bool
check_constant (struct symbol *sym)
{
};
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
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,
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)
{