diff options
Diffstat (limited to 'gdb/expop.h')
-rw-r--r-- | gdb/expop.h | 982 |
1 files changed, 345 insertions, 637 deletions
diff --git a/gdb/expop.h b/gdb/expop.h index bfe55e4..c2f5af9 100644 --- a/gdb/expop.h +++ b/gdb/expop.h @@ -31,23 +31,18 @@ struct agent_expr; struct axs_value; -extern void gen_expr_binop (struct expression *exp, - enum exp_opcode op, +extern void gen_expr_binop (struct expression *exp, enum exp_opcode op, expr::operation *lhs, expr::operation *rhs, struct agent_expr *ax, struct axs_value *value); -extern void gen_expr_structop (struct expression *exp, - enum exp_opcode op, - expr::operation *lhs, - const char *name, +extern void gen_expr_structop (struct expression *exp, enum exp_opcode op, + expr::operation *lhs, const char *name, struct agent_expr *ax, struct axs_value *value); -extern void gen_expr_unop (struct expression *exp, - enum exp_opcode op, - expr::operation *lhs, - struct agent_expr *ax, struct axs_value *value); +extern void gen_expr_unop (struct expression *exp, enum exp_opcode op, + expr::operation *lhs, struct agent_expr *ax, + struct axs_value *value); extern struct value *eval_op_scope (struct type *expect_type, - struct expression *exp, - enum noside noside, + struct expression *exp, enum noside noside, struct type *type, const char *string); extern struct value *eval_op_var_msym_value (struct type *expect_type, struct expression *exp, @@ -59,16 +54,15 @@ extern struct value *eval_op_var_entry_value (struct type *expect_type, enum noside noside, symbol *sym); extern struct value *eval_op_func_static_var (struct type *expect_type, struct expression *exp, - enum noside noside, - value *func, const char *var); + enum noside noside, value *func, + const char *var); extern struct value *eval_op_register (struct type *expect_type, struct expression *exp, enum noside noside, const char *name); extern struct value *eval_op_ternop (struct type *expect_type, struct expression *exp, - enum noside noside, - struct value *array, struct value *low, - struct value *upper); + enum noside noside, struct value *array, + struct value *low, struct value *upper); extern struct value *eval_op_structop_struct (struct type *expect_type, struct expression *exp, enum noside noside, @@ -81,15 +75,13 @@ extern struct value *eval_op_structop_ptr (struct type *expect_type, const char *string); extern struct value *eval_op_member (struct type *expect_type, struct expression *exp, - enum noside noside, - struct value *arg1, struct value *arg2); + enum noside noside, struct value *arg1, + struct value *arg2); extern struct value *eval_op_add (struct type *expect_type, - struct expression *exp, - enum noside noside, + struct expression *exp, enum noside noside, struct value *arg1, struct value *arg2); extern struct value *eval_op_sub (struct type *expect_type, - struct expression *exp, - enum noside noside, + struct expression *exp, enum noside noside, struct value *arg1, struct value *arg2); extern struct value *eval_op_binary (struct type *expect_type, struct expression *exp, @@ -101,48 +93,39 @@ extern struct value *eval_op_subscript (struct type *expect_type, struct value *arg1, struct value *arg2); extern struct value *eval_op_equal (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, struct value *arg2); extern struct value *eval_op_notequal (struct type *expect_type, struct expression *exp, enum noside noside, enum exp_opcode op, - struct value *arg1, - struct value *arg2); + struct value *arg1, struct value *arg2); extern struct value *eval_op_less (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, struct value *arg2); extern struct value *eval_op_gtr (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, struct value *arg2); extern struct value *eval_op_geq (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, struct value *arg2); extern struct value *eval_op_leq (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, struct value *arg2); extern struct value *eval_op_repeat (struct type *expect_type, struct expression *exp, enum noside noside, enum exp_opcode op, - struct value *arg1, - struct value *arg2); + struct value *arg1, struct value *arg2); extern struct value *eval_op_plus (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1); + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1); extern struct value *eval_op_neg (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1); + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1); extern struct value *eval_op_complement (struct type *expect_type, struct expression *exp, enum noside noside, @@ -150,50 +133,41 @@ extern struct value *eval_op_complement (struct type *expect_type, struct value *arg1); extern struct value *eval_op_lognot (struct type *expect_type, struct expression *exp, - enum noside noside, - enum exp_opcode op, + enum noside noside, enum exp_opcode op, struct value *arg1); extern struct value *eval_op_preinc (struct type *expect_type, struct expression *exp, - enum noside noside, - enum exp_opcode op, + enum noside noside, enum exp_opcode op, struct value *arg1); extern struct value *eval_op_predec (struct type *expect_type, struct expression *exp, - enum noside noside, - enum exp_opcode op, + enum noside noside, enum exp_opcode op, struct value *arg1); extern struct value *eval_op_postinc (struct type *expect_type, struct expression *exp, - enum noside noside, - enum exp_opcode op, + enum noside noside, enum exp_opcode op, struct value *arg1); extern struct value *eval_op_postdec (struct type *expect_type, struct expression *exp, - enum noside noside, - enum exp_opcode op, + enum noside noside, enum exp_opcode op, struct value *arg1); extern struct value *eval_op_ind (struct type *expect_type, - struct expression *exp, - enum noside noside, + struct expression *exp, enum noside noside, struct value *arg1); extern struct value *eval_op_type (struct type *expect_type, - struct expression *exp, - enum noside noside, struct type *type); + struct expression *exp, enum noside noside, + struct type *type); extern struct value *eval_op_alignof (struct type *expect_type, struct expression *exp, - enum noside noside, - struct value *arg1); + enum noside noside, struct value *arg1); extern struct value *eval_op_memval (struct type *expect_type, struct expression *exp, - enum noside noside, - struct value *arg1, struct type *type); -extern struct value *eval_binop_assign_modify (struct type *expect_type, - struct expression *exp, - enum noside noside, - enum exp_opcode op, - struct value *arg1, - struct value *arg2); + enum noside noside, struct value *arg1, + struct type *type); +extern struct value * +eval_binop_assign_modify (struct type *expect_type, struct expression *exp, + enum noside noside, enum exp_opcode op, + struct value *arg1, struct value *arg2); namespace expr { @@ -228,8 +202,7 @@ check_objfile (struct symbol *sym, struct objfile *objfile) return check_objfile (sym->objfile (), objfile); } -extern bool check_objfile (const struct block *block, - struct objfile *objfile); +extern bool check_objfile (const struct block *block, struct objfile *objfile); static inline bool check_objfile (const block_symbol &sym, struct objfile *objfile) @@ -305,8 +278,7 @@ extern bool check_objfile (const std::unique_ptr<ada_component> &comp, struct objfile *objfile); static inline void -dump_for_expression (struct ui_file *stream, int depth, - const operation_up &op) +dump_for_expression (struct ui_file *stream, int depth, const operation_up &op) { op->dump (stream, depth); } @@ -343,7 +315,7 @@ void dump_for_expression (struct ui_file *stream, int depth, const std::vector<T> &vals) { - gdb_printf (stream, _("%*sVector:\n"), depth, ""); + gdb_printf (stream, _ ("%*sVector:\n"), depth, ""); for (auto &item : vals) dump_for_expression (stream, depth + 1, item); } @@ -392,16 +364,16 @@ private: /* do_dump does the work of dumping the data. */ template<int I, typename... T> - typename std::enable_if<I == sizeof... (T), void>::type - do_dump (struct ui_file *stream, int depth, const std::tuple<T...> &value) - const + typename std::enable_if<I == sizeof...(T), void>::type + do_dump (struct ui_file *stream, int depth, + const std::tuple<T...> &value) const { } template<int I, typename... T> - typename std::enable_if<I < sizeof... (T), void>::type - do_dump (struct ui_file *stream, int depth, const std::tuple<T...> &value) - const + typename std::enable_if + < I<sizeof...(T), void>::type do_dump (struct ui_file *stream, int depth, + const std::tuple<T...> &value) const { dump_for_expression (stream, depth, std::get<I> (value)); do_dump<I + 1, T...> (stream, depth, value); @@ -410,17 +382,17 @@ private: /* do_check_objfile does the work of checking whether this object refers to OBJFILE. */ template<int I, typename... T> - typename std::enable_if<I == sizeof... (T), bool>::type - do_check_objfile (struct objfile *objfile, const std::tuple<T...> &value) - const + typename std::enable_if<I == sizeof...(T), bool>::type + do_check_objfile (struct objfile *objfile, + const std::tuple<T...> &value) const { return false; } template<int I, typename... T> - typename std::enable_if<I < sizeof... (T), bool>::type - do_check_objfile (struct objfile *objfile, const std::tuple<T...> &value) - const + typename std::enable_if < I<sizeof...(T), bool>::type + do_check_objfile (struct objfile *objfile, + const std::tuple<T...> &value) const { if (check_objfile (std::get<I> (value), objfile)) return true; @@ -472,9 +444,7 @@ static inline bool check_constant (struct symbol *sym) { enum address_class sc = sym->aclass (); - return (sc == LOC_BLOCK - || sc == LOC_CONST - || sc == LOC_CONST_BYTES + return (sc == LOC_BLOCK || sc == LOC_CONST || sc == LOC_CONST_BYTES || sc == LOC_LABEL); } @@ -507,8 +477,7 @@ check_constant (const std::pair<S, T> &item) implementation of 'constant_p' that works by checking the operands. */ template<typename... Arg> -class maybe_constant_operation - : public tuple_holding_operation<Arg...> +class maybe_constant_operation : public tuple_holding_operation<Arg...> { public: @@ -522,15 +491,15 @@ public: private: template<int I, typename... T> - typename std::enable_if<I == sizeof... (T), bool>::type + typename std::enable_if<I == sizeof...(T), bool>::type do_check_constant (const std::tuple<T...> &value) const { return true; } template<int I, typename... T> - typename std::enable_if<I < sizeof... (T), bool>::type - do_check_constant (const std::tuple<T...> &value) const + typename std::enable_if < I<sizeof...(T), bool>::type + do_check_constant (const std::tuple<T...> &value) const { if (!check_constant (std::get<I> (value))) return false; @@ -548,8 +517,7 @@ typedef std::array<gdb_byte, 16> float_data; This does not need the facilities provided by tuple_holding_operation, so it does not use it. */ -class float_const_operation - : public operation +class float_const_operation : public operation { public: @@ -559,18 +527,15 @@ public: { } - value *evaluate (struct type *expect_type, - struct expression *exp, + 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; } + enum exp_opcode opcode () const override { return OP_FLOAT; } - bool constant_p () const override - { return true; } + bool constant_p () const override { return true; } void dump (struct ui_file *stream, int depth) const override; @@ -587,81 +552,65 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - return eval_op_scope (expect_type, exp, noside, - std::get<0> (m_storage), + return eval_op_scope (expect_type, exp, noside, std::get<0> (m_storage), std::get<1> (m_storage).c_str ()); } value *evaluate_for_address (struct expression *exp, enum noside noside) override; - value *evaluate_funcall (struct type *expect_type, - struct expression *exp, + value *evaluate_funcall (struct type *expect_type, struct expression *exp, enum noside noside, const std::vector<operation_up> &args) override; - enum exp_opcode opcode () const override - { return OP_SCOPE; } + enum exp_opcode opcode () const override { return OP_SCOPE; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Compute the value of a variable. */ -class var_value_operation - : public maybe_constant_operation<block_symbol> +class var_value_operation : public maybe_constant_operation<block_symbol> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; value *evaluate_with_coercion (struct expression *exp, enum noside noside) override; - value *evaluate_for_sizeof (struct expression *exp, enum noside noside) - override; + value *evaluate_for_sizeof (struct expression *exp, + enum noside noside) override; - value *evaluate_for_cast (struct type *expect_type, - struct expression *exp, + value *evaluate_for_cast (struct type *expect_type, struct expression *exp, enum noside noside) override; - value *evaluate_for_address (struct expression *exp, enum noside noside) - override; + value *evaluate_for_address (struct expression *exp, + enum noside noside) override; - value *evaluate_funcall (struct type *expect_type, - struct expression *exp, + value *evaluate_funcall (struct type *expect_type, struct expression *exp, enum noside noside, const std::vector<operation_up> &args) override; - enum exp_opcode opcode () const override - { return OP_VAR_VALUE; } + enum exp_opcode opcode () const override { return OP_VAR_VALUE; } /* Return the symbol referenced by this object. */ - symbol *get_symbol () const - { - return std::get<0> (m_storage).symbol; - } + symbol *get_symbol () const { return std::get<0> (m_storage).symbol; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; class long_const_operation @@ -671,27 +620,22 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + 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)); } - enum exp_opcode opcode () const override - { return OP_LONG; } + enum exp_opcode opcode () const override { return OP_LONG; } - bool constant_p () const override - { return true; } + bool constant_p () const override { return true; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; class var_msym_value_operation @@ -701,26 +645,23 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return eval_op_var_msym_value (expect_type, exp, noside, m_outermost, std::get<0> (m_storage)); } - value *evaluate_for_sizeof (struct expression *exp, enum noside noside) - override; + value *evaluate_for_sizeof (struct expression *exp, + enum noside noside) override; - value *evaluate_for_address (struct expression *exp, enum noside noside) - override; + value *evaluate_for_address (struct expression *exp, + enum noside noside) override; - value *evaluate_for_cast (struct type *expect_type, - struct expression *exp, + value *evaluate_for_cast (struct type *expect_type, struct expression *exp, enum noside noside) override; - value *evaluate_funcall (struct type *expect_type, - struct expression *exp, + value *evaluate_funcall (struct type *expect_type, struct expression *exp, enum noside noside, const std::vector<operation_up> &args) override { @@ -728,43 +669,34 @@ public: return operation::evaluate_funcall (expect_type, exp, noside, name, args); } - enum exp_opcode opcode () const override - { return OP_VAR_MSYM_VALUE; } + enum exp_opcode opcode () const override { return OP_VAR_MSYM_VALUE; } - void set_outermost () override - { - m_outermost = true; - } + void set_outermost () override { m_outermost = true; } protected: /* True if this is the outermost operation in the expression. */ bool m_outermost = false; - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; -class var_entry_value_operation - : public tuple_holding_operation<symbol *> +class var_entry_value_operation : public tuple_holding_operation<symbol *> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return eval_op_var_entry_value (expect_type, exp, noside, std::get<0> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_VAR_ENTRY_VALUE; } + enum exp_opcode opcode () const override { return OP_VAR_ENTRY_VALUE; } }; class func_static_var_operation @@ -774,8 +706,7 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *func = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); @@ -783,128 +714,100 @@ public: std::get<1> (m_storage).c_str ()); } - enum exp_opcode opcode () const override - { return OP_FUNC_STATIC_VAR; } + enum exp_opcode opcode () const override { return OP_FUNC_STATIC_VAR; } }; -class last_operation - : public tuple_holding_operation<int> +class last_operation : public tuple_holding_operation<int> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return access_value_history (std::get<0> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_LAST; } + enum exp_opcode opcode () const override { return OP_LAST; } }; -class register_operation - : public tuple_holding_operation<std::string> +class register_operation : public tuple_holding_operation<std::string> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return eval_op_register (expect_type, exp, noside, std::get<0> (m_storage).c_str ()); } - enum exp_opcode opcode () const override - { return OP_REGISTER; } + enum exp_opcode opcode () const override { return OP_REGISTER; } /* Return the name of the register. */ - const char *get_name () const - { - return std::get<0> (m_storage).c_str (); - } + const char *get_name () const { return std::get<0> (m_storage).c_str (); } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; -class bool_operation - : public tuple_holding_operation<bool> +class bool_operation : public tuple_holding_operation<bool> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { struct type *type = language_bool_type (exp->language_defn, exp->gdbarch); return value_from_longest (type, std::get<0> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_BOOL; } + enum exp_opcode opcode () const override { return OP_BOOL; } - bool constant_p () const override - { return true; } + bool constant_p () const override { return true; } }; -class internalvar_operation - : public tuple_holding_operation<internalvar *> +class internalvar_operation : public tuple_holding_operation<internalvar *> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - return value_of_internalvar (exp->gdbarch, - std::get<0> (m_storage)); + return value_of_internalvar (exp->gdbarch, std::get<0> (m_storage)); } - internalvar *get_internalvar () const - { - return std::get<0> (m_storage); - } + internalvar *get_internalvar () const { return std::get<0> (m_storage); } - enum exp_opcode opcode () const override - { return OP_INTERNALVAR; } + enum exp_opcode opcode () const override { return OP_INTERNALVAR; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; -class string_operation - : public tuple_holding_operation<std::string> +class string_operation : public tuple_holding_operation<std::string> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return OP_STRING; } + enum exp_opcode opcode () const override { return OP_STRING; } }; class ternop_slice_operation @@ -914,8 +817,7 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { struct value *array @@ -927,8 +829,7 @@ public: return eval_op_ternop (expect_type, exp, noside, array, low, upper); } - enum exp_opcode opcode () const override - { return TERNOP_SLICE; } + enum exp_opcode opcode () const override { return TERNOP_SLICE; } }; class ternop_cond_operation @@ -938,8 +839,7 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { struct value *val @@ -950,16 +850,13 @@ public: return std::get<1> (m_storage)->evaluate (nullptr, exp, noside); } - enum exp_opcode opcode () const override - { return TERNOP_COND; } + enum exp_opcode opcode () const override { return TERNOP_COND; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; class complex_operation @@ -969,18 +866,15 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *real = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); value *imag = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); - return value_literal_complex (real, imag, - std::get<2> (m_storage)); + return value_literal_complex (real, imag, std::get<2> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_COMPLEX; } + enum exp_opcode opcode () const override { return OP_COMPLEX; } }; class structop_base_operation @@ -989,13 +883,9 @@ class structop_base_operation public: /* Used for completion. Return the field name. */ - const std::string &get_string () const - { - return std::get<1> (m_storage); - } + const std::string &get_string () const { return std::get<1> (m_storage); } - value *evaluate_funcall (struct type *expect_type, - struct expression *exp, + value *evaluate_funcall (struct type *expect_type, struct expression *exp, enum noside noside, const std::vector<operation_up> &args) override; @@ -1017,49 +907,41 @@ protected: using tuple_holding_operation::tuple_holding_operation; }; -class structop_operation - : public structop_base_operation +class structop_operation : public structop_base_operation { public: using structop_base_operation::structop_base_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *val =std::get<0> (m_storage)->evaluate (nullptr, exp, noside); + value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); return eval_op_structop_struct (expect_type, exp, noside, val, std::get<1> (m_storage).c_str ()); } - enum exp_opcode opcode () const override - { return STRUCTOP_STRUCT; } + enum exp_opcode opcode () const override { return STRUCTOP_STRUCT; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { gen_expr_structop (exp, STRUCTOP_STRUCT, std::get<0> (this->m_storage).get (), - std::get<1> (this->m_storage).c_str (), - ax, value); + std::get<1> (this->m_storage).c_str (), ax, value); } }; -class structop_ptr_operation - : public structop_base_operation +class structop_ptr_operation : public structop_base_operation { public: using structop_base_operation::structop_base_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); @@ -1067,21 +949,16 @@ public: std::get<1> (m_storage).c_str ()); } - enum exp_opcode opcode () const override - { return STRUCTOP_PTR; } + enum exp_opcode opcode () const override { return STRUCTOP_PTR; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_structop (exp, STRUCTOP_PTR, - std::get<0> (this->m_storage).get (), - std::get<1> (this->m_storage).c_str (), - ax, value); + gen_expr_structop (exp, STRUCTOP_PTR, std::get<0> (this->m_storage).get (), + std::get<1> (this->m_storage).c_str (), ax, value); } }; @@ -1092,54 +969,43 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate_funcall (struct type *expect_type, - struct expression *exp, + value *evaluate_funcall (struct type *expect_type, struct expression *exp, enum noside noside, const std::vector<operation_up> &args) override; }; -class structop_member_operation - : public structop_member_base +class structop_member_operation : public structop_member_base { public: using structop_member_base::structop_member_base; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate_for_address (exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate_for_address (exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); return eval_op_member (expect_type, exp, noside, lhs, rhs); } - enum exp_opcode opcode () const override - { return STRUCTOP_MEMBER; } + enum exp_opcode opcode () const override { return STRUCTOP_MEMBER; } }; -class structop_mptr_operation - : public structop_member_base +class structop_mptr_operation : public structop_member_base { public: using structop_member_base::structop_member_base; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); return eval_op_member (expect_type, exp, noside, lhs, rhs); } - enum exp_opcode opcode () const override - { return STRUCTOP_MPTR; } + enum exp_opcode opcode () const override { return STRUCTOP_MPTR; } }; class concat_operation @@ -1149,19 +1015,15 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); return value_concat (lhs, rhs); } - enum exp_opcode opcode () const override - { return BINOP_CONCAT; } + enum exp_opcode opcode () const override { return BINOP_CONCAT; } }; class add_operation @@ -1171,32 +1033,24 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); return eval_op_add (expect_type, exp, noside, lhs, rhs); } - enum exp_opcode opcode () const override - { return BINOP_ADD; } + enum exp_opcode opcode () const override { return BINOP_ADD; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_binop (exp, BINOP_ADD, - std::get<0> (this->m_storage).get (), - std::get<1> (this->m_storage).get (), - ax, value); + gen_expr_binop (exp, BINOP_ADD, std::get<0> (this->m_storage).get (), + std::get<1> (this->m_storage).get (), ax, value); } }; @@ -1207,39 +1061,31 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); return eval_op_sub (expect_type, exp, noside, lhs, rhs); } - enum exp_opcode opcode () const override - { return BINOP_SUB; } + enum exp_opcode opcode () const override { return BINOP_SUB; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_binop (exp, BINOP_SUB, - std::get<0> (this->m_storage).get (), - std::get<1> (this->m_storage).get (), - ax, value); + gen_expr_binop (exp, BINOP_SUB, std::get<0> (this->m_storage).get (), + std::get<1> (this->m_storage).get (), ax, value); } }; typedef struct value *binary_ftype (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1, struct value *arg2); + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1, + struct value *arg2); template<enum exp_opcode OP, binary_ftype FUNC> class binop_operation @@ -1249,24 +1095,19 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { - value *lhs - = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); - value *rhs - = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); + value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); + value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); return FUNC (expect_type, exp, noside, OP, lhs, rhs); } - enum exp_opcode opcode () const override - { return OP; } + enum exp_opcode opcode () const override { return OP; } }; template<enum exp_opcode OP, binary_ftype FUNC> -class usual_ax_binop_operation - : public binop_operation<OP, FUNC> +class usual_ax_binop_operation : public binop_operation<OP, FUNC> { public: @@ -1274,16 +1115,12 @@ public: protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_binop (exp, OP, - std::get<0> (this->m_storage).get (), - std::get<1> (this->m_storage).get (), - ax, value); + gen_expr_binop (exp, OP, std::get<0> (this->m_storage).get (), + std::get<1> (this->m_storage).get (), ax, value); } }; @@ -1297,16 +1134,17 @@ using rem_operation = usual_ax_binop_operation<BINOP_REM, eval_op_binary>; using lsh_operation = usual_ax_binop_operation<BINOP_LSH, eval_op_binary>; using rsh_operation = usual_ax_binop_operation<BINOP_RSH, eval_op_binary>; using bitwise_and_operation - = usual_ax_binop_operation<BINOP_BITWISE_AND, eval_op_binary>; + = usual_ax_binop_operation<BINOP_BITWISE_AND, eval_op_binary>; using bitwise_ior_operation - = usual_ax_binop_operation<BINOP_BITWISE_IOR, eval_op_binary>; + = usual_ax_binop_operation<BINOP_BITWISE_IOR, eval_op_binary>; using bitwise_xor_operation - = usual_ax_binop_operation<BINOP_BITWISE_XOR, eval_op_binary>; + = usual_ax_binop_operation<BINOP_BITWISE_XOR, eval_op_binary>; class subscript_operation : public usual_ax_binop_operation<BINOP_SUBSCRIPT, eval_op_subscript> { public: + using usual_ax_binop_operation<BINOP_SUBSCRIPT, eval_op_subscript>::usual_ax_binop_operation; @@ -1316,64 +1154,51 @@ public: /* Implementation of comparison operations. */ template<enum exp_opcode OP, binary_ftype FUNC> -class comparison_operation - : public usual_ax_binop_operation<OP, FUNC> +class comparison_operation : public usual_ax_binop_operation<OP, FUNC> { public: using usual_ax_binop_operation<OP, FUNC>::usual_ax_binop_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *lhs = std::get<0> (this->m_storage)->evaluate (nullptr, exp, noside); - value *rhs - = std::get<1> (this->m_storage)->evaluate (value_type (lhs), exp, - noside); + value *rhs = std::get<1> (this->m_storage) + ->evaluate (value_type (lhs), exp, noside); return FUNC (expect_type, exp, noside, OP, lhs, rhs); } }; -class equal_operation - : public comparison_operation<BINOP_EQUAL, eval_op_equal> +class equal_operation : public comparison_operation<BINOP_EQUAL, eval_op_equal> { public: using comparison_operation::comparison_operation; - operation *get_lhs () const - { - return std::get<0> (m_storage).get (); - } + operation *get_lhs () const { return std::get<0> (m_storage).get (); } - operation *get_rhs () const - { - return std::get<1> (m_storage).get (); - } + operation *get_rhs () const { return std::get<1> (m_storage).get (); } }; using notequal_operation - = comparison_operation<BINOP_NOTEQUAL, eval_op_notequal>; + = comparison_operation<BINOP_NOTEQUAL, eval_op_notequal>; using less_operation = comparison_operation<BINOP_LESS, eval_op_less>; using gtr_operation = comparison_operation<BINOP_GTR, eval_op_gtr>; using geq_operation = comparison_operation<BINOP_GEQ, eval_op_geq>; using leq_operation = comparison_operation<BINOP_LEQ, eval_op_leq>; /* Implement the GDB '@' repeat operator. */ -class repeat_operation - : public binop_operation<BINOP_REPEAT, eval_op_repeat> +class repeat_operation : public binop_operation<BINOP_REPEAT, eval_op_repeat> { using binop_operation<BINOP_REPEAT, eval_op_repeat>::binop_operation; protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* C-style comma operator. */ @@ -1384,8 +1209,7 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { /* The left-hand-side is only evaluated for side effects, so don't @@ -1395,113 +1219,96 @@ public: return std::get<1> (m_storage)->evaluate (nullptr, exp, noside); } - enum exp_opcode opcode () const override - { return BINOP_COMMA; } + enum exp_opcode opcode () const override { return BINOP_COMMA; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; typedef struct value *unary_ftype (struct type *expect_type, - struct expression *exp, - enum noside noside, enum exp_opcode op, - struct value *arg1); + struct expression *exp, enum noside noside, + enum exp_opcode op, struct value *arg1); /* Base class for unary operations. */ template<enum exp_opcode OP, unary_ftype FUNC> -class unop_operation - : public maybe_constant_operation<operation_up> +class unop_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); return FUNC (expect_type, exp, noside, OP, val); } - enum exp_opcode opcode () const override - { return OP; } + enum exp_opcode opcode () const override { return OP; } }; /* Unary operations that can also be turned into agent expressions in the "usual" way. */ template<enum exp_opcode OP, unary_ftype FUNC> -class usual_ax_unop_operation - : public unop_operation<OP, FUNC> +class usual_ax_unop_operation : public unop_operation<OP, FUNC> { using unop_operation<OP, FUNC>::unop_operation; protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_unop (exp, OP, - std::get<0> (this->m_storage).get (), - ax, value); + gen_expr_unop (exp, OP, std::get<0> (this->m_storage).get (), ax, value); } }; using unary_plus_operation = usual_ax_unop_operation<UNOP_PLUS, eval_op_plus>; using unary_neg_operation = usual_ax_unop_operation<UNOP_NEG, eval_op_neg>; using unary_complement_operation - = usual_ax_unop_operation<UNOP_COMPLEMENT, eval_op_complement>; + = usual_ax_unop_operation<UNOP_COMPLEMENT, eval_op_complement>; using unary_logical_not_operation - = usual_ax_unop_operation<UNOP_LOGICAL_NOT, eval_op_lognot>; + = usual_ax_unop_operation<UNOP_LOGICAL_NOT, eval_op_lognot>; /* Handle pre- and post- increment and -decrement. */ template<enum exp_opcode OP, unary_ftype FUNC> -class unop_incr_operation - : public tuple_holding_operation<operation_up> +class unop_incr_operation : public tuple_holding_operation<operation_up> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (expect_type, exp, noside); return FUNC (expect_type, exp, noside, OP, val); } - enum exp_opcode opcode () const override - { return OP; } + enum exp_opcode opcode () const override { return OP; } }; using preinc_operation - = unop_incr_operation<UNOP_PREINCREMENT, eval_op_preinc>; + = unop_incr_operation<UNOP_PREINCREMENT, eval_op_preinc>; using predec_operation - = unop_incr_operation<UNOP_PREDECREMENT, eval_op_predec>; + = unop_incr_operation<UNOP_PREDECREMENT, eval_op_predec>; using postinc_operation - = unop_incr_operation<UNOP_POSTINCREMENT, eval_op_postinc>; + = unop_incr_operation<UNOP_POSTINCREMENT, eval_op_postinc>; using postdec_operation - = unop_incr_operation<UNOP_POSTDECREMENT, eval_op_postdec>; + = unop_incr_operation<UNOP_POSTDECREMENT, eval_op_postdec>; /* Base class for implementations of UNOP_IND. */ -class unop_ind_base_operation - : public tuple_holding_operation<operation_up> +class unop_ind_base_operation : public tuple_holding_operation<operation_up> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { if (expect_type != nullptr && expect_type->code () == TYPE_CODE_PTR) @@ -1516,13 +1323,11 @@ public: value *evaluate_for_sizeof (struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return UNOP_IND; } + enum exp_opcode opcode () const override { return UNOP_IND; } }; /* Ordinary UNOP_IND implementation. */ -class unop_ind_operation - : public unop_ind_base_operation +class unop_ind_operation : public unop_ind_base_operation { public: @@ -1530,73 +1335,61 @@ public: protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_unop (exp, UNOP_IND, - std::get<0> (this->m_storage).get (), - ax, value); + gen_expr_unop (exp, UNOP_IND, std::get<0> (this->m_storage).get (), ax, + value); } }; /* Implement OP_TYPE. */ -class type_operation - : public tuple_holding_operation<struct type *> +class type_operation : public tuple_holding_operation<struct type *> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return eval_op_type (expect_type, exp, noside, std::get<0> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_TYPE; } + enum exp_opcode opcode () const override { return OP_TYPE; } - bool constant_p () const override - { return true; } + bool constant_p () const override { return true; } }; /* Implement the "typeof" operation. */ -class typeof_operation - : public maybe_constant_operation<operation_up> +class typeof_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { if (noside == EVAL_AVOID_SIDE_EFFECTS) return std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS); else - error (_("Attempt to use a type as an expression")); + error (_ ("Attempt to use a type as an expression")); } - enum exp_opcode opcode () const override - { return OP_TYPEOF; } + enum exp_opcode opcode () const override { return OP_TYPEOF; } }; /* Implement 'decltype'. */ -class decltype_operation - : public maybe_constant_operation<operation_up> +class decltype_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -1605,12 +1398,9 @@ public: = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS); enum exp_opcode sub_op = std::get<0> (m_storage)->opcode (); - if (sub_op == BINOP_SUBSCRIPT - || sub_op == STRUCTOP_MEMBER - || sub_op == STRUCTOP_MPTR - || sub_op == UNOP_IND - || sub_op == STRUCTOP_STRUCT - || sub_op == STRUCTOP_PTR + if (sub_op == BINOP_SUBSCRIPT || sub_op == STRUCTOP_MEMBER + || sub_op == STRUCTOP_MPTR || sub_op == UNOP_IND + || sub_op == STRUCTOP_STRUCT || sub_op == STRUCTOP_PTR || sub_op == OP_SCOPE) { struct type *type = value_type (result); @@ -1625,60 +1415,53 @@ public: return result; } else - error (_("Attempt to use a type as an expression")); + error (_ ("Attempt to use a type as an expression")); } - enum exp_opcode opcode () const override - { return OP_DECLTYPE; } + enum exp_opcode opcode () const override { return OP_DECLTYPE; } }; /* Implement 'typeid'. */ -class typeid_operation - : public tuple_holding_operation<operation_up> +class typeid_operation : public tuple_holding_operation<operation_up> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { enum exp_opcode sub_op = std::get<0> (m_storage)->opcode (); enum noside sub_noside = ((sub_op == OP_TYPE || sub_op == OP_DECLTYPE || sub_op == OP_TYPEOF) - ? EVAL_AVOID_SIDE_EFFECTS - : noside); + ? EVAL_AVOID_SIDE_EFFECTS + : noside); - value *result = std::get<0> (m_storage)->evaluate (nullptr, exp, - sub_noside); + value *result + = std::get<0> (m_storage)->evaluate (nullptr, exp, sub_noside); if (noside != EVAL_NORMAL) return allocate_value (cplus_typeid_type (exp->gdbarch)); return cplus_typeid (result); } - enum exp_opcode opcode () const override - { return OP_TYPEID; } + enum exp_opcode opcode () const override { return OP_TYPEID; } }; /* Implement the address-of operation. */ -class unop_addr_operation - : public maybe_constant_operation<operation_up> +class unop_addr_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { /* C++: check for and handle pointer to members. */ return std::get<0> (m_storage)->evaluate_for_address (exp, noside); } - enum exp_opcode opcode () const override - { return UNOP_ADDR; } + enum exp_opcode opcode () const override { return UNOP_ADDR; } /* Return the subexpression. */ const operation_up &get_expression () const @@ -1688,55 +1471,45 @@ public: protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override + struct type *cast_type) override { - gen_expr_unop (exp, UNOP_ADDR, - std::get<0> (this->m_storage).get (), - ax, value); + gen_expr_unop (exp, UNOP_ADDR, std::get<0> (this->m_storage).get (), ax, + value); } }; /* Implement 'sizeof'. */ -class unop_sizeof_operation - : public maybe_constant_operation<operation_up> +class unop_sizeof_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return std::get<0> (m_storage)->evaluate_for_sizeof (exp, noside); } - enum exp_opcode opcode () const override - { return UNOP_SIZEOF; } + enum exp_opcode opcode () const override { return UNOP_SIZEOF; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Implement 'alignof'. */ -class unop_alignof_operation - : public maybe_constant_operation<operation_up> +class unop_alignof_operation : public maybe_constant_operation<operation_up> { public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, @@ -1744,8 +1517,7 @@ public: return eval_op_alignof (expect_type, exp, noside, val); } - enum exp_opcode opcode () const override - { return UNOP_ALIGNOF; } + enum exp_opcode opcode () const override { return UNOP_ALIGNOF; } }; /* Implement UNOP_MEMVAL. */ @@ -1756,8 +1528,7 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (expect_type, exp, noside); @@ -1771,22 +1542,16 @@ public: value *evaluate_for_address (struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return UNOP_MEMVAL; } + enum exp_opcode opcode () const override { return UNOP_MEMVAL; } /* Return the type referenced by this object. */ - struct type *get_type () const - { - return std::get<1> (m_storage); - } + struct type *get_type () const { return std::get<1> (m_storage); } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Implement UNOP_MEMVAL_TYPE. */ @@ -1797,8 +1562,7 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *typeval @@ -1815,43 +1579,35 @@ public: value *evaluate_for_address (struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return UNOP_MEMVAL_TYPE; } + enum exp_opcode opcode () const override { return UNOP_MEMVAL_TYPE; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Implement the 'this' expression. */ -class op_this_operation - : public tuple_holding_operation<> +class op_this_operation : public tuple_holding_operation<> { public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return value_of_this (exp->language_defn); } - enum exp_opcode opcode () const override - { return OP_THIS; } + enum exp_opcode opcode () const override { return OP_THIS; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Implement the "type instance" operation. */ @@ -1863,12 +1619,10 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return TYPE_INSTANCE; } + enum exp_opcode opcode () const override { return TYPE_INSTANCE; } }; /* The assignment operator. */ @@ -1879,8 +1633,7 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); @@ -1889,9 +1642,8 @@ public: expected type. This avoids a weird case where re-assigning a string or array to an internal variable could error with "Too many array elements". */ - struct type *xtype = (VALUE_LVAL (lhs) == lval_internalvar - ? nullptr - : value_type (lhs)); + struct type *xtype + = (VALUE_LVAL (lhs) == lval_internalvar ? nullptr : value_type (lhs)); value *rhs = std::get<1> (m_storage)->evaluate (xtype, exp, noside); if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -1902,22 +1654,16 @@ public: return value_assign (lhs, rhs); } - enum exp_opcode opcode () const override - { return BINOP_ASSIGN; } + enum exp_opcode opcode () const override { return BINOP_ASSIGN; } /* Return the left-hand-side of the assignment. */ - operation *get_lhs () const - { - return std::get<0> (m_storage).get (); - } + operation *get_lhs () const { return std::get<0> (m_storage).get (); } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Assignment with modification, like "+=". */ @@ -1928,8 +1674,7 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *lhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside); @@ -1938,16 +1683,13 @@ public: std::get<0> (m_storage), lhs, rhs); } - enum exp_opcode opcode () const override - { return BINOP_ASSIGN_MODIFY; } + enum exp_opcode opcode () const override { return BINOP_ASSIGN_MODIFY; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* Not a cast! Extract a value of a given type from the contents of a @@ -1964,19 +1706,14 @@ public: value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return UNOP_EXTRACT; } + enum exp_opcode opcode () const override { return UNOP_EXTRACT; } /* Return the type referenced by this object. */ - struct type *get_type () const - { - return std::get<1> (m_storage); - } + struct type *get_type () const { return std::get<1> (m_storage); } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, struct type *cast_type) override; }; @@ -1989,30 +1726,23 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return std::get<0> (m_storage)->evaluate_for_cast (std::get<1> (m_storage), exp, noside); } - enum exp_opcode opcode () const override - { return UNOP_CAST; } + enum exp_opcode opcode () const override { return UNOP_CAST; } /* Return the type referenced by this object. */ - struct type *get_type () const - { - return std::get<1> (m_storage); - } + struct type *get_type () const { return std::get<1> (m_storage); } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* A cast, but the type comes from an expression, not a "struct @@ -2024,26 +1754,22 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS); - return std::get<1> (m_storage)->evaluate_for_cast (value_type (val), - exp, noside); + return std::get<1> (m_storage)->evaluate_for_cast (value_type (val), exp, + noside); } - enum exp_opcode opcode () const override - { return UNOP_CAST_TYPE; } + enum exp_opcode opcode () const override { return UNOP_CAST_TYPE; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; typedef value *cxx_cast_ftype (struct type *, value *); @@ -2058,8 +1784,7 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, @@ -2069,14 +1794,13 @@ public: return FUNC (type, rhs); } - enum exp_opcode opcode () const override - { return OP; } + enum exp_opcode opcode () const override { return OP; } }; -using dynamic_cast_operation = cxx_cast_operation<UNOP_DYNAMIC_CAST, - value_dynamic_cast>; -using reinterpret_cast_operation = cxx_cast_operation<UNOP_REINTERPRET_CAST, - value_reinterpret_cast>; +using dynamic_cast_operation + = cxx_cast_operation<UNOP_DYNAMIC_CAST, value_dynamic_cast>; +using reinterpret_cast_operation + = cxx_cast_operation<UNOP_REINTERPRET_CAST, value_reinterpret_cast>; /* Multi-dimensional subscripting. */ class multi_subscript_operation @@ -2086,12 +1810,10 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return MULTI_SUBSCRIPT; } + enum exp_opcode opcode () const override { return MULTI_SUBSCRIPT; } }; /* The "&&" operator. */ @@ -2102,20 +1824,16 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return BINOP_LOGICAL_AND; } + enum exp_opcode opcode () const override { return BINOP_LOGICAL_AND; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* The "||" operator. */ @@ -2126,20 +1844,16 @@ public: using maybe_constant_operation::maybe_constant_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return BINOP_LOGICAL_OR; } + enum exp_opcode opcode () const override { return BINOP_LOGICAL_OR; } protected: - void do_generate_ax (struct expression *exp, - struct agent_expr *ax, + void do_generate_ax (struct expression *exp, struct agent_expr *ax, struct axs_value *value, - struct type *cast_type) - override; + struct type *cast_type) override; }; /* This class implements ADL (aka Koenig) function calls for C++. It @@ -2153,12 +1867,10 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return OP_ADL_FUNC; } + enum exp_opcode opcode () const override { return OP_ADL_FUNC; } }; /* The OP_ARRAY operation. */ @@ -2169,12 +1881,10 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override; - enum exp_opcode opcode () const override - { return OP_ARRAY; } + enum exp_opcode opcode () const override { return OP_ARRAY; } private: @@ -2192,16 +1902,14 @@ public: using tuple_holding_operation::tuple_holding_operation; - value *evaluate (struct type *expect_type, - struct expression *exp, + value *evaluate (struct type *expect_type, struct expression *exp, enum noside noside) override { return std::get<0> (m_storage)->evaluate_funcall (expect_type, exp, noside, std::get<1> (m_storage)); } - enum exp_opcode opcode () const override - { return OP_FUNCALL; } + enum exp_opcode opcode () const override { return OP_FUNCALL; } }; } /* namespace expr */ |