Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Refactor value_pos_atr
This refactors value_pos_atr to be directly usable by a new operation
implementation.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_pos_atr): Rename from value_pos_atr. Change
parameters.
(ada_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Ada min and max operations
This implement the Ada min and max operations using an existing
template class.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_binop_minmax): No longer static.
* ada-exp.h (ada_binop_min_operation, ada_binop_max_operation):
New typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_var_msym_value_operation
This adds class ada_var_msym_value_operation, which implements
OP_VAR_MSYM_VALUE for Ada.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast):
New method.
* ada-exp.h (class ada_var_msym_value_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_var_value_operation
This adds class ada_var_value_operation, which implements OP_VAR_VALUE
for Ada.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_var_value_operation::evaluate_for_cast)
(ada_var_value_operation::evaluate): New methods.
* ada-exp.h (class ada_var_value_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement some Ada OP_ATR_ operations
This implements a few Ada OP_ATR_ operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_unop_atr_operation::evaluate): New method.
* ada-exp.h (class ada_unop_atr_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_binop_in_bounds
This adds class ada_binop_in_bounds, which implements BINOP_IN_BOUNDS.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_binop_in_bounds): No longer static.
* ada-exp.h (class ada_binop_in_bounds_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_ternop_slice
This adds class ada_ternop_slice, which implements TERNOP_SLICE for
Ada.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_ternop_slice): No longer static.
* ada-exp.h (class ada_ternop_slice_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_bitwise_operation
This adds class ada_bitwise_operation, which is used to implement the
Ada bitwise operators.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-exp.h (ada_bitwise_operation): New template class.
(ada_bitwise_and_operation, ada_bitwise_ior_operation)
(ada_bitwise_xor_operation): New typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Ada equality operators
This implements the Ada equal and not-equal operators.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_equal_binop): No longer static.
* ada-exp.h (class ada_binop_equal_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Ada multiplicative operators
This implements the Ada multiplicative operators, using an existing
template class.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_mult_binop): No longer static.
* ada-exp.h (ada_binop_mul_operation ada_binop_div_operation)
(ada_binop_rem_operation, ada_binop_mod_operation): New typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_binop_addsub_operation
This adds class ada_binop_addsub_operation, which implements the Ada +
and - operators.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_binop_addsub_operation::evaluate): New method.
* ada-exp.h (class ada_binop_addsub_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out some Ada type resolution code
This splits some Ada type resolution code out of resolve_subexp into
new functions that can be reused.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
(ada_resolve_variable): Declare.
* ada-lang.c (ada_find_operator_symbol, ada_resolve_funcall)
(ada_resolve_variable): New functions.
(resolve_subexp): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement OpenCL ternary conditional operator
This implements the ?: ternary conditional operator for OpenCL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_ternop_cond_operation::evaluate): New
method.
* c-exp.h (class opencl_ternop_cond_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement OpenCL logical binary operations
This implements "&&" and "||" for OpenCL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_logical_binop_operation::evaluate): New
method.
* c-exp.h (class opencl_logical_binop_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce opencl_structop_operation
This adds class opencl_structop_operation, which implements
STRUCTOP_STRUCT for OpenCL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_structop_operation::evaluate): New
method.
* c-exp.h (class opencl_structop_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce opencl_notequal_operation
This adds the opencl_notequal_operation typedef, implementing "!=" for
OpenCL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_logical_not): No longer static. Change
parameters.
(evaluate_subexp_opencl): Update.
* c-exp.h (opencl_notequal_operation): New typedef.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement OpenCL binary operations
This implements various OpenCL binary operations, adding a new
template class to do so.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_relop, eval_opencl_assign): No longer
static. Change parameters.
(eval_opencl_assign): No longer static. Add "op" parameter.
(evaluate_subexp_opencl): Update.
* c-exp.h (opencl_binop_operation): New template class.
(opencl_assign_operation, opencl_equal_operation)
(opencl_notequal_operation, opencl_less_operation)
(opencl_gtr_operation, opencl_geq_operation)
(opencl_leq_operation): New typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce opencl_cast_type_operation
This adds class opencl_cast_type_operation, which implements
UNOP_CAST_TYPE for OpenCL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (opencl_value_cast): No longer static.
* c-exp.h (opencl_cast_type_operation): New typedef.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement fortran_allocated_operation
This implements the Fortran ALLOCATED intrinsic.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-exp.h (eval_op_f_allocated): Declare.
(fortran_allocated_operation): New typedef.
* f-lang.c (eval_op_f_allocated): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Fortran associated operations
This implements the Fortran 1- and 2-argument "associated" operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_associated): New functions.
* f-exp.h (fortran_associated_1arg, fortran_associated_2arg): New
typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce classes for Fortran bound intrinsics
This adds class fortran_bound_1arg and fortran_bound_2arg, to
implement the Fortran lbound and ubound intrinsics.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (fortran_bound_1arg::evaluate)
(fortran_bound_2arg::evaluate): New methods.
* f-exp.h (class fortran_bound_1arg, class fortran_bound_2arg):
New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce fortran_undetermined
This adds class fortran_undetermined, which implements
OP_F77_UNDETERMINED_ARGLIST. fortran_range_operation is also added
here, as it is needed by fortran_undetermined.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_addr_operation) <get_expression>: New
method.
* f-lang.c (fortran_undetermined::value_subarray)
(fortran_undetermined::evaluate): New methods.
(fortran_prepare_argument): New overload.
* f-exp.h (class fortran_range_operation)
(class fortran_undetermined): New classes.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Rust funcall operation
This adds the special code needed to handle the Rust function call
operation.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_structop::evaluate_funcall): New method.
* rust-exp.h (class rust_structop) <evaluate_funcall>: Declare
method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement function call operations
This implement function call operations.
The current function call code relies on some very lengthy code
(evaluate_funcall is 398 lines...) to distinguish between the
different opcodes that might appear in the callee position.
Rather than try to replicate this, and have a function that tried to
dissect many different kinds of operation subclass, this patch instead
puts the work into the callee. A new operation::evaluate_funcall
method is added, and then this is overridden in the classes that
require special treatment.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expression.h (class operation) <evaluate_funcall>: New methods.
* expop.h (class scope_operation) <evaluate_funcall>: New method.
(class var_value_operation) <evaluate_funcall>: New method.
(class structop_base_operation) <evaluate_funcall>: New method.
(class var_msym_value_operation) <evaluate_funcall>: New method.
(class structop_member_base): New class.
(class structop_member_operation): Derive from
structop_member_base.
(class structop_mptr_operation): Derive from
structop_member_base.
(class funcall_operation): New class.
* eval.c (operation::evaluate_funcall)
(var_value_operation::evaluate_funcall)
(scope_operation::evaluate_funcall)
(structop_member_base::evaluate_funcall)
(structop_base_operation::evaluate_funcall): New methods.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce array_operation
This adds class array_operation, which implements OP_ARRAY.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class array_operation): New.
* eval.c (array_operation::evaluate_struct_tuple)
(array_operation::evaluate): New methods.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce class adl_func_operation
This adds class adl_func_operation, which implements
argument-dependent lookup function calls.
Other function calls will be handled in a different way. However,
because ADL calls were created in a single spot in the C++ parser, and
because they had different semantics from the other cases, it was
convenient to treat them specially.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class adl_func_operation): New.
* eval.c (adl_func_operation::evaluate): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_unop_range_operation
This adds class ada_unop_range_operation, which implements
UNOP_IN_RANGE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_unop_in_range): No longer static.
* ada-exp.h (class ada_unop_range_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement some Ada unary operations
This implements a few Ada unary operations, using the existing
unop_operation template class.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_unop_neg, ada_atr_tag, ada_atr_size, ada_abs):
No longer static.
* ada-exp.h (ada_neg_operation, ada_atr_tag_operation)
(ada_atr_size_operation, ada_abs_operation): New typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement the "&&" and "||" operators
This implements the "&&" and "||" operators.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class logical_and_operation)
(class logical_or_operation): New.
* eval.c (logical_and_operation::evaluate)
(logical_or_operation::evaluate): New methods.
* ax-gdb.c (logical_and_operation::do_generate_ax)
(logical_or_operation::do_generate_ax): New methods.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Add two simple Modula-2 operations
This adds a couple of simple Modula-2 operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): No longer
static.
* m2-exp.h: New file.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce rust_aggregate_operation
This adds class rust_aggregate_operation, which implements
OP_AGGREGATE for Rust.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_aggregate_operation::evaluate): New method.
* rust-exp.h (class rust_aggregate_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement Rust field operations
This implements the field operations STRUCTOP_STRUCT and
STRUCTOP_ANONYMOUS, for Rust.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_struct_anon, eval_op_rust_structop):
No longer static.
* rust-exp.h (class rust_struct_anon): New.
(class rust_structop): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce rust_range_operation
This adds class rust_range_operation, which implements OP_RANGE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_range): No longer static.
* rust-exp.h (class rust_range_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce rust_subscript_operation
This adds class rust_subscript_operation, which implements
BINOP_SUBSCRIPT for Rust.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_subscript): No longer static.
* rust-exp.h (class rust_subscript_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce rust_unop_ind_operation
This adds class rust_unop_ind_operation, which implements UNOP_IND for
Rust. Rust requires a special case here to handle trait objects.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_ind): No longer static. Add "opcode"
parameter.
(rust_evaluate_subexp): Update.
* rust-exp.h (class rust_unop_ind_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement some Rust operations
This implements some straightforward Rust operations, using existing
template classes.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_complement, eval_op_rust_array): No
longer static. Add "opcode" parameter.
(rust_evaluate_subexp): Update.
* rust-exp.h: New file.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement several Fortran operations
This implements several straightforward Fortran operations, primarily
by reusing existing template classes.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_abs, eval_op_f_mod, eval_op_f_ceil)
(eval_op_f_floor, eval_op_f_modulo, eval_op_f_cmplx)
(eval_op_f_kind): No longer static. Add "opcode" parameter.
(evaluate_subexp_f): Update.
* f-exp.h: New file.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_ternop_range_operation
This adds class ada_ternop_range_operation, which implements
TERNOP_IN_RANGE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_ternop_range_operation::evaluate): New method.
* ada-exp.h (class ada_ternop_range_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_qual_operation
This adds class ada_qual_operation, which implements UNOP_QUAL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_qual_operation::evaluate): New method.
* ada-exp.h (class ada_qual_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_string_operation
This adds class ada_string_operation, which implements string
constants for Ada.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_string_operation::evaluate): New method.
* ada-exp.h (class ada_string_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ada_wrapped_operation
This adds class ada_wrapped_operation, which is used to wrap some
generic operations with a bit of Ada-specific handling. This
corresponds to the old "default" case in ada_evaluate_subexp.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ada-lang.c (ada_wrapped_operation::evaluate): New method.
* ada-exp.h: New file.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce multi_subscript_operation
This adds class multi_subscript_operation, which implements
MULTI_SUBSCRIPT.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class multi_subscript_operation): New.
* eval.c (multi_subscript_operation::evaluate): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce objc_msgcall_operation
This adds class objc_msgcall_operation, which implements
OP_OBJC_MSGCALL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (objc_msgcall_operation::evaluate): New method.
* c-exp.h (class objc_msgcall_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce var_value_operation
This adds class var_value_operation, which implements OP_VAR_VALUE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class var_value_operation): New.
* eval.c (var_value_operation::evaluate)
(var_value_operation::evaluate_for_address)
(var_value_operation::evaluate_with_coercion)
(var_value_operation::evaluate_for_sizeof)
(var_value_operation::evaluate_for_cast): New methods.
* ax-gdb.c (var_value_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement C++ cast operations
This adds class cxx_cast_operation, which is used to implement the C++
dynamic_cast and reinterpret_cast operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (cxx_cast_ftype): New typedef.
(cxx_cast_operation): New template.
(dynamic_cast_operation, reinterpret_cast_operation): New
typedefs.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_cast_type_operation
This adds class unop_cast_type_operation, which implements
UNOP_CAST_TYPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_cast_type_operation): New.
* ax-gdb.c (unop_cast_type_operation::do_generate_ax): New
method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_cast_operation
This adds class unop_cast_operation, which implements UNOP_CAST.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_cast_operation): New.
* ax-gdb.c (unop_cast_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce assign_modify_operation
This adds class assign_modify_operation, which implements
BINOP_ASSIGN_MODIFY.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class assign_modify_operation): New.
* eval.c (eval_binop_assign_modify): No longer static.
* ax-gdb.c (assign_modify_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce assign_operation
This adds class assign_operation, which implements BINOP_ASSIGN.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class assign_operation): New.
* ax-gdb.c (assign_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce type_instance_operation
This adds class type_instance_operation, which implements
TYPE_INSTANCE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class type_instance_operation): New.
* eval.c (type_instance_operation::evaluate): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce op_this_operation
This adds class op_this_operation, which implements OP_THIS.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class op_this_operation): New.
* ax-gdb.c (op_this_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement UNOP_MEMVAL and UNOP_MEMVAL_TYPE
This adds class unop_memval_operation and unop_memval_type_operation,
which implement UNOP_MEMVAL and UNOP_MEMVAL_TYPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_memval_operation)
(class unop_memval_type_operation): New.
* eval.c (eval_op_memval): No longer static.
(unop_memval_operation::evaluate_for_address)
(unop_memval_type_operation::evaluate_for_address)
(unop_memval_operation::evaluate_for_sizeof)
(unop_memval_type_operation::evaluate_for_sizeof): New methods.
* ax-gdb.c (unop_memval_operation::do_generate_ax)
(unop_memval_type_operation::do_generate_ax): New methods.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_alignof_operation
This adds class unop_alignof_operation, which implements UNOP_ALIGNOF.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_alignof_operation): New.
* eval.c (eval_op_alignof): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_sizeof_operation
This adds class unop_sizeof_operation, which implements UNOP_SIZEOF.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_sizeof_operation): New.
* ax-gdb.c (unop_sizeof_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_addr_operation
This adds class unop_addr_operation, which implements UNOP_ADDR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_addr_operation): New.
* ax-gdb.c (gen_expr_unop) <case UNOP_ADDR>: New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce typeid_operation
This adds class typeid_operation, which implements OP_TYPEID.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class typeid_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce decltype_operation
This adds class decltype_operation, which implements OP_DECLTYPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class decltype_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce typeof_operation
This adds class typeof_operation, which implements OP_TYPEOF.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class typeof_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce type_operation
This adds class type_operation, which implements OP_TYPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class type_operation): New.
* eval.c (eval_op_type): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce unop_ind_operation
This adds class unop_ind_operation, which implements UNOP_IND.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class unop_ind_base_operation)
(class unop_ind_operation): New.
* eval.c (eval_op_ind): No longer static. Remove "op" parameter.
(unop_ind_base_operation::evaluate_for_address)
(unop_ind_base_operation::evaluate_for_sizeof): New method.
* ax-gdb.c (gen_expr_unop) <case UNOP_IND>: New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement unary increment and decrement operations
This implements the unary increment and decrement operations, "++" and
"--".
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (unop_incr_operation): New template.
(preinc_operation, predec_operation, postinc_operation)
(postdec_operation): New typedefs.
* eval.c (eval_op_preinc, eval_op_predec, eval_op_postinc)
(eval_op_postdec): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement some unary operations
This introduces a couple of new template classes and then uses them to
implement some simple unary operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (unary_ftype): New typedef.
(unop_operation, usual_ax_binop_operation): New templates.
(unary_plus_operation, unary_neg_operation)
(unary_complement_operation, unary_logical_not_operation): New
typedefs.
* eval.c (eval_op_plus, eval_op_neg, eval_op_complement)
(eval_op_lognot): No longer static.
* ax-gdb.c (gen_expr_unop): New function.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce comma_operation
This adds class comma_operation, which implements BINOP_COMMA.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ax-gdb.c (comma_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce repeat_operation
This adds class repeat_operation, which implements BINOP_REPEAT.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class repeat_operation): New.
* eval.c (eval_op_repeat): No longer static. Remove "op"
parameter.
(evaluate_subexp_standard): Update.
* ax-gdb.c (repeat_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement binary comparison operations
This implements the binary comparison operations via a template class.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class comparison_operation): New.
(equal_operation, notequal_operation, less_operation)
(gtr_operation, geq_operation, leq_operation): New typedefs.
* eval.c (eval_op_equal, eval_op_notequal, eval_op_less)
(eval_op_gtr, eval_op_geq, eval_op_leq): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce subscript_operation
This adds class subscript_operation, which implements BINOP_SUBSCRIPT.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class subscript_operation): New.
* eval.c (eval_op_subscript): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce binop_operation
This adds two new template classes, binop_operation and
usual_ax_binop_operation, and then uses these to implement a number of
binary operations that follow similar patterns.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class binop_operation, class usual_ax_binop_operation):
New.
(exp_operation, intdiv_operation, mod_operation, mul_operation)
(div_operation, rem_operation, lsh_operation, rsh_operation)
(bitwise_and_operation, bitwise_ior_operation)
(bitwise_xor_operation): New typedefs.
* eval.c (eval_op_binary): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce sub_operation
This adds class sub_operation, which implements BINOP_SUB.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class sub_operation): New.
* eval.c (eval_op_sub): No longer static. Remove "op" parameter.
(evaluate_subexp_standard): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce add_operation
This adds class add_operation, which implements BINOP_ADD.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class add_operation): New.
* eval.c (eval_op_add): No longer static. Remove "op" parameter.
(evaluate_subexp_standard): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce concat_operation
This adds class concat_operation, which implements BINOP_CONCAT.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class concat_operation): New.
* eval.c (eval_op_concat): No longer static. Remove "op"
parameter.
(evaluate_subexp_standard): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce structop_member_operation and structop_mptr_operation
This adds class structop_member_operation and structop_mptr_operation,
which implement STRUCTOP_MEMBER and STRUCTOP_MPTR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class structop_member_operation)
(class structop_mptr_operation): New.
* eval.c (eval_op_member): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce structop_ptr_operation
This adds class structop_ptr_operation, which implements STRUCTOP_PTR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class structop_ptr_operation): New.
* eval.c (eval_op_structop_ptr): No longer static. Remove "op"
parameter.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce structop_operation
This adds class structop_base_operation and structop_operation, which
implement STRUCTOP_STRUCT. The base class exists to unify the
completion code between STRUCTOP_STRUCT and STRUCTOP_PTR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class structop_base_operation)
(class structop_operation): New.
* eval.c (eval_op_structop_struct): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce complex_operation
This adds class complex_operation, which implements OP_COMPLEX.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class complex_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce objc_selector_operation
This adds class objc_selector_operation, which implements
OP_OBJC_SELECTOR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_objc_selector): No longer static.
* c-exp.h (class objc_selector_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce objc_nsstring_operation
This adds class objc_nsstring_operation, which implements
OP_OBJC_NSSTRING.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c: Include c-exp.h.
* c-exp.h (class objc_nsstring_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Add c-exp.h and c_string_operation
This adds the new file c-exp.h, where C operation classes will be
declared. The first such class, c_string_operation, is also added
here.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* c-lang.c (c_string_operation::evaluate): New method.
* c-exp.h: New file.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ternop_cond_operation
This adds class ternop_cond_operation, which implements TERNOP_COND.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class ternop_cond_operation): New.
* ax-gdb.c (ternop_cond_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce ternop_slice_operation
This adds class ternop_slice_operation, which implements TERNOP_SLICE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class ternop_slice_operation): New.
* eval.c (eval_op_ternop): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce string_operation
This adds string_operation, which implements OP_STRING for most
languages (C has its own variant).
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class string_operation): New.
* eval.c (eval_op_string): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce internalvar_operation
This adds class internalvar_operation, which implements
OP_INTERNALVAR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class internalvar_operation): New.
* ax-gdb.c (internalvar_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce bool_operation
This adds class bool_operation, which implements OP_BOOL.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class bool_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce register_operation
This adds class register_operation, which implements OP_REGISTER.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class register_operation): New.
* eval.c (eval_op_register): No longer static.
* ax-gdb.c (register_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce last_operation
This adds class last_operation, which implements OP_LAST.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class last_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce func_static_var_operation
This adds class func_static_var_operation, which implements
OP_FUNC_STATIC_VAR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class func_static_var_operation): New.
* eval.c (eval_op_func_static_var): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce var_entry_value_operation
This adds class var_entry_value_operation, which implements
OP_VAR_ENTRY_VALUE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class var_entry_value_operation): New.
* eval.c (eval_op_var_entry_value): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce var_msym_value_operation
This adds class var_msym_value_operation, which implements
OP_VAR_MSYM_VALUE. A new method is added to class operation in order
to support a special case in minsym evaluation.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expression.h (class operation) <set_outermost>: New method.
* expop.h (class var_msym_value_operation): New.
* eval.c (eval_op_var_msym_value): No longer static.
(var_msym_value_operation::evaluate_for_address)
(var_msym_value_operation::evaluate_for_sizeof)
(var_msym_value_operation::evaluate_for_cast): New methods.
* ax-gdb.c (var_msym_value_operation::do_generate_ax): New
method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce long_const_operation
This adds class long_const_operation, which holds a scalar constant.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class long_const_operation): New.
* ax-gdb.c (long_const_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce scope_operation
This adds class scope_operation, an implementation of OP_SCOPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class scope_operation): New.
* eval.c (eval_op_scope): No longer static.
(scope_operation::evaluate_for_address): New method.
* ax-gdb.c (scope_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce float_const_operation
This adds class float_const_operation, an operation holding a
floating-point constant. Unlike most other new operations, this one
requires a custom 'dump' method.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expprint.c (float_const_operation::dump): New method.
* expop.h (float_data): New typedef.
(class float_const_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Add two agent expression helper functions
This adds a couple of agent expression helper functions that will be
useful when implementing various operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (gen_expr_binop, gen_expr_structop): Declare.
* ax-gdb.c (gen_expr_binop): New function.
(gen_expr_structop): Likewise.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement dumping
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
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.