diff options
author | Tom Tromey <tom@tromey.com> | 2021-03-08 07:27:57 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-03-08 07:28:41 -0700 |
commit | 1eaebe02cfe78229d78ac27f5bd6651e1c1af863 (patch) | |
tree | 870c2965ac8dada5ed4527853f829c3ddbbaf5a2 /gdb/expression.h | |
parent | f2a98603a807101722f12b8d7a1aca9651deb133 (diff) | |
download | binutils-1eaebe02cfe78229d78ac27f5bd6651e1c1af863.zip binutils-1eaebe02cfe78229d78ac27f5bd6651e1c1af863.tar.gz binutils-1eaebe02cfe78229d78ac27f5bd6651e1c1af863.tar.bz2 |
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.
Diffstat (limited to 'gdb/expression.h')
-rw-r--r-- | gdb/expression.h | 58 |
1 files changed, 2 insertions, 56 deletions
diff --git a/gdb/expression.h b/gdb/expression.h index 3abaf6e..31482be 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -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 |