aboutsummaryrefslogtreecommitdiff
path: root/gdb/eval.c
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Introduce binop_operationTom Tromey1-1/+1
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.
2021-03-08Introduce sub_operationTom Tromey1-5/+5
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.
2021-03-08Introduce add_operationTom Tromey1-5/+5
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.
2021-03-08Introduce concat_operationTom Tromey1-6/+5
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.
2021-03-08Introduce structop_member_operation and structop_mptr_operationTom Tromey1-1/+1
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.
2021-03-08Introduce structop_ptr_operationTom Tromey1-5/+5
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.
2021-03-08Introduce structop_operationTom Tromey1-1/+1
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.
2021-03-08Introduce objc_selector_operationTom Tromey1-1/+1
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.
2021-03-08Introduce objc_nsstring_operationTom Tromey1-0/+1
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.
2021-03-08Introduce ternop_slice_operationTom Tromey1-1/+1
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.
2021-03-08Introduce string_operationTom Tromey1-1/+1
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.
2021-03-08Introduce register_operationTom Tromey1-1/+1
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.
2021-03-08Introduce func_static_var_operationTom Tromey1-1/+1
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.
2021-03-08Introduce var_entry_value_operationTom Tromey1-1/+1
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.
2021-03-08Introduce var_msym_value_operationTom Tromey1-1/+68
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.
2021-03-08Introduce scope_operationTom Tromey1-1/+13
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.
2021-03-08Introduce class operationTom Tromey1-0/+36
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 out eval_multi_subscriptTom Tromey1-33/+42
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 eval_op_objc_msgcallTom Tromey1-249/+281
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 Tromey1-27/+38
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 helper functionsTom Tromey1-23/+42
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_typeTom Tromey1-6/+15
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 Tromey1-25/+35
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 Tromey1-24/+35
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 Tromey1-21/+32
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 Tromey1-21/+32
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 Tromey1-13/+18
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 Tromey1-10/+18
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 Tromey1-45/+55
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 Tromey1-9/+20
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 Tromey1-9/+19
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-08Split out eval_op_negTom Tromey1-9/+19
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-08Split out eval_op_plusTom Tromey1-9/+19
This splits UNOP_PLUS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_plus): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_repeatTom Tromey1-13/+23
This splits BINOP_REPEAT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_repeat): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_leqTom Tromey1-13/+24
This splits BINOP_LEQ into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_leq): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_geqTom Tromey1-13/+24
This splits BINOP_GEQ into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_geq): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_gtrTom Tromey1-13/+24
This splits BINOP_GTR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_gtr): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_lessTom Tromey1-13/+24
This splits BINOP_LESS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_less): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_notequalTom Tromey1-13/+24
This splits BINOP_NOTEQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_notequal): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_equalTom Tromey1-13/+24
This splits BINOP_EQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_equal): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_subscriptTom Tromey1-26/+37
This splits BINOP_SUBSCRIPT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_subscript): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_binaryTom Tromey1-38/+48
This splits out a new eval_op_binary helper function. This function can handle several different binary operations: case BINOP_EXP: case BINOP_MUL: case BINOP_DIV: case BINOP_INTDIV: case BINOP_REM: case BINOP_MOD: case BINOP_LSH: case BINOP_RSH: case BINOP_BITWISE_AND: case BINOP_BITWISE_IOR: case BINOP_BITWISE_XOR: gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_binary): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_subTom Tromey1-19/+29
This splits BINOP_SUB into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_sub): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_addTom Tromey1-15/+25
This splits BINOP_ADD into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_add): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_memberTom Tromey1-32/+44
This splits STRUCTOP_MEMBER into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_member): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_structop_ptrTom Tromey1-50/+61
This splits STRUCTOP_PTR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_structop_ptr): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_structop_structTom Tromey1-7/+18
This splits STRUCTOP_STRUCT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_structop_struct): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_ternopTom Tromey1-7/+17
This splits TERNOP_SLICE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_ternop): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_concatTom Tromey1-6/+16
This splits BINOP_CONCAT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_concat): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_objc_selectorTom Tromey1-7/+16
This splits OP_OBJC_SELECTOR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_objc_selector): New function. (evaluate_subexp_standard): Use it.