mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
Remove union exp_element
This removes union exp_element functions that either create such elements or walk them. struct expression no longer holds exp_elements. A couple of language_defn methods are also removed, as they are obsolete. Note that this patch also removes the print_expression code. The only in-tree caller of this was from dump_prefix_expression, which is only called when expression debugging is enabled. Implementing this would involve a fair amount of code, and it seems to me that prefix dumping is preferable anyway, as it is unambiguous. So, I have not reimplemented this feature. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * value.h (evaluate_subexp_with_coercion): Don't declare. * parse.c (exp_descriptor_standard): Remove. (expr_builder::expr_builder, expr_builder::release): Update. (expression::expression): Remove size_t parameter. (expression::~expression): Simplify. (expression::resize): Remove. (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) (write_exp_elt_longcst, write_exp_elt_floatcst) (write_exp_elt_type, write_exp_elt_intern, write_exp_string) (write_exp_string_vector, write_exp_bitstring): Remove. * p-lang.h (class pascal_language) <opcode_print_table, op_print_tab>: Remove. * p-lang.c (pascal_language::op_print_tab): Remove. * opencl-lang.c (class opencl_language) <opcode_print_table>: Remove. * objc-lang.c (objc_op_print_tab): Remove. (class objc_language) <opcode_print_table>: Remove. * m2-lang.h (class m2_language) <opcode_print_table, op_print_tab>: Remove. * m2-lang.c (m2_language::op_print_tab): Remove. * language.h (struct language_defn) <post_parser, expression_ops, opcode_print_table>: Remove. * language.c (language_defn::expression_ops) (auto_or_unknown_language::opcode_print_table): Remove. * go-lang.h (class go_language) <opcode_print_table, op_print_tab>: Remove. * go-lang.c (go_language::op_print_tab): Remove. * f-lang.h (class f_language) <opcode_print_table>: Remove <op_print_tab>: Remove. * f-lang.c (f_language::op_print_tab): Remove. * expression.h (union exp_element): Remove. (struct expression): Remove size_t parameter from constructor. <resize>: Remove. <first_opcode>: Update. <nelts, elts>: Remove. (EXP_ELEM_TO_BYTES, BYTES_TO_EXP_ELEM): Remove. (evaluate_subexp_standard, print_expression, op_string) (dump_raw_expression): Don't declare. * expprint.c (print_expression, print_subexp) (print_subexp_funcall, print_subexp_standard, op_string) (dump_raw_expression, dump_subexp, dump_subexp_body) (dump_subexp_body_funcall, dump_subexp_body_standard): Remove. (dump_prefix_expression): Update. * eval.c (evaluate_subexp): Remove. (evaluate_expression, evaluate_type): Update. (evaluate_subexpression_type): Remove. (fetch_subexp_value): Remove "pc" parameter. Update. (extract_field_op, evaluate_struct_tuple, evaluate_funcall) (evaluate_subexp_standard, evaluate_subexp_for_address) (evaluate_subexp_with_coercion, evaluate_subexp_for_sizeof) (evaluate_subexp_for_cast): Remove. (parse_and_eval_type): Update. * dtrace-probe.c (dtrace_probe::compile_to_ax): Update. * d-lang.c (d_op_print_tab): Remove. (class d_language) <opcode_print_table>: Remove. * c-lang.h (c_op_print_tab): Don't declare. * c-lang.c (c_op_print_tab): Remove. (class c_language, class cplus_language, class asm_language, class minimal_language) <opcode_print_table>: Remove. * breakpoint.c (update_watchpoint, watchpoint_check) (watchpoint_exp_is_const, watch_command_1): Update. * ax-gdb.h (union exp_element): Don't declare. * ax-gdb.c (const_var_ref, const_expr, maybe_const_expr) (gen_repeat, gen_sizeof, gen_expr_for_cast, gen_expr) (gen_expr_binop_rest): Remove. (gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update. * ada-lang.c (ada_op_print_tab): Remove. (class ada_language) <post_parser, opcode_print_table>: Remove.
This commit is contained in:
@ -40,21 +40,6 @@ enum innermost_block_tracker_type
|
||||
DEF_ENUM_FLAGS_TYPE (enum innermost_block_tracker_type,
|
||||
innermost_block_tracker_types);
|
||||
|
||||
/* Definitions for saved C expressions. */
|
||||
|
||||
/* An expression is represented as a vector of union exp_element's.
|
||||
Each exp_element is an opcode, except that some opcodes cause
|
||||
the following exp_element to be treated as a long or double constant
|
||||
or as a variable. The opcodes are obeyed, using a stack for temporaries.
|
||||
The value is left on the temporary stack at the end. */
|
||||
|
||||
/* When it is necessary to include a string,
|
||||
it can occupy as many exp_elements as it needs.
|
||||
We find the length of the string using strlen,
|
||||
divide to find out how many exp_elements are used up,
|
||||
and skip that many. Strings, like numbers, are indicated
|
||||
by the preceding opcode. */
|
||||
|
||||
enum exp_opcode : uint8_t
|
||||
{
|
||||
#define OP(name) name ,
|
||||
@ -212,37 +197,17 @@ make_operation (Arg... args)
|
||||
|
||||
}
|
||||
|
||||
union exp_element
|
||||
{
|
||||
enum exp_opcode opcode;
|
||||
struct symbol *symbol;
|
||||
struct minimal_symbol *msymbol;
|
||||
LONGEST longconst;
|
||||
gdb_byte floatconst[16];
|
||||
/* Really sizeof (union exp_element) characters (or less for the last
|
||||
element of a string). */
|
||||
char string;
|
||||
struct type *type;
|
||||
struct internalvar *internalvar;
|
||||
const struct block *block;
|
||||
struct objfile *objfile;
|
||||
};
|
||||
|
||||
struct expression
|
||||
{
|
||||
expression (const struct language_defn *, struct gdbarch *, size_t);
|
||||
expression (const struct language_defn *, struct gdbarch *);
|
||||
~expression ();
|
||||
DISABLE_COPY_AND_ASSIGN (expression);
|
||||
|
||||
void resize (size_t);
|
||||
|
||||
/* Return the opcode for the outermost sub-expression of this
|
||||
expression. */
|
||||
enum exp_opcode first_opcode () const
|
||||
{
|
||||
if (op != nullptr)
|
||||
return op->opcode ();
|
||||
return elts[0].opcode;
|
||||
return op->opcode ();
|
||||
}
|
||||
|
||||
/* Evaluate the expression. EXPECT_TYPE is the context type of the
|
||||
@ -255,20 +220,10 @@ struct expression
|
||||
/* Architecture it was parsed in. */
|
||||
struct gdbarch *gdbarch;
|
||||
expr::operation_up op;
|
||||
int nelts = 0;
|
||||
union exp_element *elts;
|
||||
};
|
||||
|
||||
typedef std::unique_ptr<expression> expression_up;
|
||||
|
||||
/* Macros for converting between number of expression elements and bytes
|
||||
to store that many expression elements. */
|
||||
|
||||
#define EXP_ELEM_TO_BYTES(elements) \
|
||||
((elements) * sizeof (union exp_element))
|
||||
#define BYTES_TO_EXP_ELEM(bytes) \
|
||||
(((bytes) + sizeof (union exp_element) - 1) / sizeof (union exp_element))
|
||||
|
||||
/* From parse.c */
|
||||
|
||||
class innermost_block_tracker;
|
||||
@ -289,9 +244,6 @@ extern expression_up parse_exp_1 (const char **, CORE_ADDR pc,
|
||||
|
||||
/* From eval.c */
|
||||
|
||||
extern struct value *evaluate_subexp_standard
|
||||
(struct type *, struct expression *, int *, enum noside);
|
||||
|
||||
/* Evaluate a function call. The function to be called is in CALLEE and
|
||||
the arguments passed to the function are in ARGVEC.
|
||||
FUNCTION_NAME is the name of the function, if known.
|
||||
@ -307,14 +259,8 @@ extern struct value *evaluate_subexp_do_call (expression *exp,
|
||||
|
||||
/* From expprint.c */
|
||||
|
||||
extern void print_expression (struct expression *, struct ui_file *);
|
||||
|
||||
extern const char *op_name (enum exp_opcode opcode);
|
||||
|
||||
extern const char *op_string (enum exp_opcode);
|
||||
|
||||
extern void dump_raw_expression (struct expression *,
|
||||
struct ui_file *, const char *);
|
||||
extern void dump_prefix_expression (struct expression *, struct ui_file *);
|
||||
|
||||
/* In an OP_RANGE expression, either bound could be empty, indicating
|
||||
|
Reference in New Issue
Block a user