aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Implement dumpingTom Tromey3-1/+185
This patch implements the dumping methods for tuple_holding_operation. A number of overloads are used. Note that no default case is given. This approach makes it simple to detect when a new overload is needed -- compilation will fail. (There is an example of this in a later patch in the series.) gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expprint.c (expr::dump_for_expression): New functions. * expop.h (dump_for_expression): New overloads. (tuple_holding_operation::dump, tuple_holding_operation::do_dump): Update.
2021-03-08Introduce class operationTom Tromey5-0/+487
This patch introduces class operation, the new base class for all expression operations. In the new approach, an operation is simply a class that presents a certain interface. Operations own their operands, and management is done via unique_ptr. The operation interface is largely ad hoc, based on the evolution of expression handling in GDB. Parts (for example, evaluate_with_coercion) are probably redundant; however I took this approach to try to avoid mixing different kinds of refactorings. In some specific situations, rather than add a generic method across the entire operation class hierarchy, I chose instead to use dynamic_cast and specialized methods on certain concrete subclasses. This will appear in some subsequent patches. One goal of this work is to avoid the kinds of easy-to-make errors that affected the old implementation. To this end, some helper subclasses are also added here. These helpers automate the implementation of the 'dump', 'uses_objfile', and 'constant_p' methods. Nearly every concrete operation that is subsequently added will use these facilities. (Note that the 'dump' implementation is only outlined here, the body appears in the next patch.) gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expression.h (expr::operation): New class. (expr::make_operation): New function. (expr::operation_up): New typedef. * expop.h: New file. * eval.c (operation::evaluate_for_cast) (operation::evaluate_for_address, operation::evaluate_for_sizeof): New methods. * ax-gdb.c (operation::generate_ax): New method.
2021-03-08Split gen_expr_binop_restTom Tromey2-2/+19
This splits gen_expr_binop_rest into two overloads. One overload retains the "pc" parameter, while the other does not, and furthermore does not call gen_expr on the left-hand-side. This split is useful for subsequent patches in the new expression evaluation approach. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter. (gen_expr_binop_rest): New overload.
2021-03-08Split out eval_multi_subscriptTom Tromey2-33/+47
This splits MULTI_SUBSCRIPT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_multi_subscript): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out ada_binop_expTom Tromey2-13/+29
This splits BINOP_EXP into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_exp): New function. (ada_evaluate_subexp): Use it.
2021-03-08Change value_val_atr to ada_val_atrTom Tromey2-7/+11
This renames value_val_atr to ada_val_atr, changing its parameters to more closely mirror other expression helpers. The EVAL_AVOID_SIDE_EFFECTS case is moved into this function as well. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_val_atr): Rename from value_val_atr. Change parameters. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_minmaxTom Tromey2-8/+24
This splits OP_ATR_MIN and OP_ATR_MAX into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_minmax): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_atrTom Tromey2-116/+133
This splits some Ada attribute operations into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_atr): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_in_boundsTom Tromey2-22/+36
This splits BINOP_IN_BOUNDS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_in_bounds): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_ternop_sliceTom Tromey2-70/+88
This splits TERNOP_SLICE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_slice): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_equal_binopTom Tromey2-11/+28
This splits BINOP_EQUAL and BINOP_NOTEQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_equal_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_mult_binopTom Tromey2-11/+27
This splits BINOP_MUL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_mult_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_absTom Tromey2-5/+21
This splits UNOP_ABS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_abs): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_sizeTom Tromey2-15/+31
This splits OP_ATR_SIZE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_size): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_tagTom Tromey2-5/+20
This splits OP_ATR_TAG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_tag): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_in_rangeTom Tromey2-27/+43
This splits UNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_negTom Tromey2-7/+20
This splits UNOP_NEG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_neg): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out eval_ternop_in_rangeTom Tromey2-12/+27
This splits TERNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (eval_ternop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out eval_opencl_assignTom Tromey2-8/+24
This splits BINOP_ASSIGN into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * opencl-lang.c (eval_opencl_assign): New function. (evaluate_subexp_opencl): Use it.
2021-03-08Split out eval_op_objc_msgcallTom Tromey2-249/+286
This splits OP_OBJC_MSGCALL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_objc_msgcall): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_binop_assign_modifyTom Tromey2-27/+43
This splits BINOP_ASSIGN_MODIFY into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_binop_assign_modify): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_m2_subscriptTom Tromey2-48/+56
This splits BINOP_SUBSCRIPT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-lang.c (eval_op_m2_subscript): New function. (evaluate_subexp_modula2): Use it.
2021-03-08Split out eval_op_m2_highTom Tromey2-23/+37
This splits UNOP_HIGH into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-lang.c (eval_op_m2_high): New function. (evaluate_subexp_modula2): Use it.
2021-03-08Split helper functionsTom Tromey2-23/+49
This splits a couple of address-of and sizeof functions, so that the body can be reused by the (coming) new expression code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (evaluate_subexp_for_address_base): New function. (evaluate_subexp_for_address): Use it. (evaluate_subexp_for_sizeof_base): New function. (evaluate_subexp_for_sizeof): Use it.
2021-03-08Split out eval_op_rust_structopTom Tromey2-39/+56
This splits STRUCTOP_STRUCT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (eval_op_rust_structop): New function. (rust_evaluate_subexp): Use it.
2021-03-08Split out eval_op_rust_struct_anonTom Tromey2-60/+75
This splits STRUCTOP_ANONYMOUS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (eval_op_rust_struct_anon): New function. (rust_evaluate_subexp): Use it.
2021-03-08Split out eval_op_rust_arrayTom Tromey2-20/+34
This splits OP_ARRAY into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (eval_op_rust_array): New function. (rust_evaluate_subexp): Use it.
2021-03-08Split out eval_op_rust_complementTom Tromey2-10/+23
This splits UNOP_COMPLEMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (eval_op_rust_complement): New function. (rust_evaluate_subexp): Use it.
2021-03-08Split out eval_op_rust_indTom Tromey2-6/+21
This splits UNOP_IND into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (eval_op_rust_ind): New function. (rust_evaluate_subexp): Use it.
2021-03-08Change parameters to rust_subscriptTom Tromey2-9/+20
This changes the parameters to rust_subscript, making it more suitable for reuse by the (coming) new expression code. In particular, rust_subscript no longer evaluates its subexpressions. Instead, they are passed in. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (rust_subscript): Change parameters. (rust_evaluate_subexp): Update.
2021-03-08Change parameters to rust_rangeTom Tromey2-11/+21
This changes the parameters to rust_range, making it more suitable for reuse by the (coming) new expression code. In particular, rust_range no longer evaluates its subexpressions. Instead, they are passed in. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.c (rust_range): Change parameters. (rust_evaluate_subexp): Update.
2021-03-08Split out eval_op_f_allocatedTom Tromey2-7/+22
This splits out a helper function, eval_op_f_allocated, that will be used in a later patch. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_allocated): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out fortran_require_arrayTom Tromey2-8/+23
This splits out a helper function, fortran_require_array, that will be used in a later patch. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (fortran_require_array): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_kindTom Tromey2-17/+31
This splits UNOP_FORTRAN_KIND into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_kind): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_cmplxTom Tromey2-4/+19
This splits BINOP_FORTRAN_CMPLX into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_cmplx): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_moduloTom Tromey2-36/+49
This splits BINOP_FORTRAN_MODULO into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_modulo): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_floorTom Tromey2-13/+26
This splits UNOP_FORTRAN_FLOOR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_floor): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_ceilTom Tromey2-13/+26
This splits UNOP_FORTRAN_CEILING into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_ceil): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_modTom Tromey2-29/+44
This splits BINOP_MOD into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_mod): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_f_absTom Tromey2-20/+35
This splits UNOP_ABS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.c (eval_op_f_abs): New function. (evaluate_subexp_f): Use it.
2021-03-08Split out eval_op_typeTom Tromey2-6/+20
This splits OP_TYPE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_type): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_postdecTom Tromey2-25/+40
This splits UNOP_POSTDECREMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_postdec): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_postincTom Tromey2-24/+40
This splits UNOP_POSTINCREMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_postinc): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_predecTom Tromey2-21/+37
This splits UNOP_PREDECREMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_predec): New file. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_preincTom Tromey2-21/+37
This splits UNOP_PREINCREMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_preinc): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_memvalTom Tromey2-13/+23
This splits UNOP_MEMVAL into a new function for future use. This new function is also used to hande UNOP_MEMVAL_TYPE. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_memval): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_alignofTom Tromey2-10/+23
This splits UNOP_ALIGNOF into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_alignof): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_indTom Tromey2-45/+60
This splits UNOP_IND into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_ind): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_lognotTom Tromey2-9/+25
This splits UNOP_LOGICAL_NOT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_lognot): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_complementTom Tromey2-9/+24
This splits UNOP_COMPLEMENT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_complement): New function. (evaluate_subexp_standard): Use it.