Commit Graph

30933 Commits

Author SHA1 Message Date
Tom Tromey
e2803273a0 Introduce class operation
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-08 07:28:13 -07:00
Tom Tromey
e18c58f290 Split gen_expr_binop_rest
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-08 07:28:13 -07:00
Tom Tromey
c0d7ed8ca8 Split out eval_multi_subscript
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-08 07:28:13 -07:00
Tom Tromey
dd5fd28346 Split out ada_binop_exp
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-08 07:28:13 -07:00
Tom Tromey
3848abd6e1 Change value_val_atr to ada_val_atr
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-08 07:28:13 -07:00
Tom Tromey
38dc70cfee Split out ada_binop_minmax
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-08 07:28:12 -07:00
Tom Tromey
b84564fc8c Split out ada_unop_atr
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-08 07:28:12 -07:00
Tom Tromey
b467efaa91 Split out ada_binop_in_bounds
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-08 07:28:12 -07:00
Tom Tromey
5ce19db80f Split out ada_ternop_slice
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-08 07:28:12 -07:00
Tom Tromey
214b13ac3b Split out ada_equal_binop
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-08 07:28:11 -07:00
Tom Tromey
faa1dfd751 Split out ada_mult_binop
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-08 07:28:11 -07:00
Tom Tromey
d05e24e61a Split out ada_abs
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-08 07:28:11 -07:00
Tom Tromey
68c757358f Split out ada_atr_size
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-08 07:28:11 -07:00
Tom Tromey
020dbabe22 Split out ada_atr_tag
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-08 07:28:10 -07:00
Tom Tromey
7efc87ffcb Split out ada_unop_in_range
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-08 07:28:10 -07:00
Tom Tromey
82390ab88c Split out ada_unop_neg
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-08 07:28:10 -07:00
Tom Tromey
62d4bd947e Split out eval_ternop_in_range
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-08 07:28:10 -07:00
Tom Tromey
3634f66996 Split out eval_opencl_assign
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-08 07:28:09 -07:00
Tom Tromey
5e80600ed0 Split out eval_op_objc_msgcall
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-08 07:28:09 -07:00
Tom Tromey
fb5ba2ab26 Split out eval_binop_assign_modify
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-08 07:28:09 -07:00
Tom Tromey
a49881f73e Split out eval_op_m2_subscript
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-08 07:28:09 -07:00
Tom Tromey
41bdced5ae Split out eval_op_m2_high
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-08 07:28:09 -07:00
Tom Tromey
13ea014aee Split helper functions
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-08 07:28:08 -07:00
Tom Tromey
1fa41fc710 Split out eval_op_rust_structop
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-08 07:28:08 -07:00
Tom Tromey
575cae2335 Split out eval_op_rust_struct_anon
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-08 07:28:08 -07:00
Tom Tromey
051042333d Split out eval_op_rust_array
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-08 07:28:08 -07:00
Tom Tromey
6fa9831f89 Split out eval_op_rust_complement
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-08 07:28:07 -07:00
Tom Tromey
d123f9e4a3 Split out eval_op_rust_ind
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-08 07:28:07 -07:00
Tom Tromey
984af2cb26 Change parameters to rust_subscript
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-08 07:28:07 -07:00
Tom Tromey
d148f80354 Change parameters to rust_range
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-08 07:28:07 -07:00
Tom Tromey
9cbd1c2011 Split out eval_op_f_allocated
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-08 07:28:07 -07:00
Tom Tromey
3c18c49c63 Split out fortran_require_array
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-08 07:28:06 -07:00
Tom Tromey
216f6fcbef Split out eval_op_f_kind
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-08 07:28:06 -07:00
Tom Tromey
00f2db6f7d Split out eval_op_f_cmplx
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-08 07:28:06 -07:00
Tom Tromey
93b2b5fae2 Split out eval_op_f_modulo
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-08 07:28:06 -07:00
Tom Tromey
9f1a1f3c4f Split out eval_op_f_floor
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-08 07:28:06 -07:00
Tom Tromey
3dc41f3cdf Split out eval_op_f_ceil
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-08 07:28:05 -07:00
Tom Tromey
e08109f24b Split out eval_op_f_mod
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-08 07:28:05 -07:00
Tom Tromey
cc05c68ee0 Split out eval_op_f_abs
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-08 07:28:05 -07:00
Tom Tromey
aec95807f1 Split out eval_op_type
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-08 07:28:05 -07:00
Tom Tromey
a220ead5d4 Split out eval_op_postdec
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-08 07:28:04 -07:00
Tom Tromey
abffe11606 Split out eval_op_postinc
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-08 07:28:04 -07:00
Tom Tromey
9e1361b760 Split out eval_op_predec
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-08 07:28:04 -07:00
Tom Tromey
00f508843c Split out eval_op_preinc
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-08 07:28:04 -07:00
Tom Tromey
3aef2a0768 Split out eval_op_memval
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-08 07:28:04 -07:00
Tom Tromey
acee94686b Split out eval_op_alignof
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-08 07:28:03 -07:00
Tom Tromey
786f70ee4d Split out eval_op_ind
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-08 07:28:03 -07:00
Tom Tromey
24338fb9d9 Split out eval_op_lognot
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-08 07:28:03 -07:00
Tom Tromey
1f09ec811e Split out eval_op_complement
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.
2021-03-08 07:28:03 -07:00
Tom Tromey
606d105ff1 Split out eval_op_neg
This splits UNOP NEG into a new function for future use.

gdb/ChangeLog
2021-03-08  Tom Tromey  <tom@tromey.com>

	* eval.c (eval_op_neg): New function.
	(evaluate_subexp_standard): Use it.
2021-03-08 07:28:02 -07:00