aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Remove BINOP_ENDTom Tromey7-100/+107
BINOP_END is used only as a "meaningless" value in various tables. This patch changes these to use OP_NULL instead, and removes BINOP_END. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (BINOP_END): Remove. * p-exp.y (tokentab3, tokentab2): Use OP_NULL, not BINOP_END. * go-exp.y (tokentab2): Use OP_NULL, not BINOP_END. * f-exp.y (dot_ops, f77_keywords): Use OP_NULL, not BINOP_END. * d-exp.y (tokentab2, ident_tokens): Use OP_NULL, not BINOP_END. * c-exp.y (tokentab3, tokentab2, ident_tokens): Use OP_NULL, not BINOP_END.
2021-03-08Remove OP_UNUSED_LASTTom Tromey2-3/+4
OP_UNUSED_LAST is no longer needed with C++ -- the trailing comma is fine. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expression.h (enum exp_opcode) <OP_UNUSED_LAST>: Remove.
2021-03-08Remove OP_EXTENDED0Tom Tromey2-4/+4
OP_EXTENDED0 was only used for an assertion in the code to rewrite an expression into prefix form. That code is gone, so this patch removes the constant. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_EXTENDED0): Remove.
2021-03-08Remove unused Ada opcodesTom Tromey2-43/+6
Several Ada expression opcodes are now unused, and can be removed. Most of these are handled in a different way by the code. OP_ATR_IMAGE, however, was never implemented. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_NAME, OP_ATR_IMAGE, OP_ATR_MODULUS) (OP_OTHERS, OP_CHOICES, OP_POSITIONAL, OP_DISCRETE_RANGE): Remove.
2021-03-08Remove unused Modula-2 opcodesTom Tromey2-9/+5
As noted in an earlier patch, Modula-2 defined some opcodes but then never implemented them. This patch removes the unnecessary constants. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (UNOP_CAP, UNOP_CHR, UNOP_ORD, UNOP_FLOAT) (UNOP_MAX, UNOP_MIN, UNOP_ODD, UNOP_TRUNC, OP_M2_STRING): Remove.
2021-03-08Remove two Ada opcodesTom Tromey4-6/+10
The OP_ATR_MIN and OP_ATR_MAX constants aren't truly needed. Internally, they are converted to BINOP_MIN and BINOP_MAX. This patch removes them in favor of simple reuse. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_ATR_MIN, OP_ATR_MAX): Remove. * ada-lang.c (ada_binop_minmax): Update. * ada-exp.h (ada_binop_min_operation, ada_binop_max_operation): Use BINOP_MIN and BINOP_MAX.
2021-03-08Remove union exp_elementTom Tromey33-5316/+147
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.
2021-03-08Remove now-unused C evaluator codeTom Tromey7-483/+14
Now that the C parser has switched to the new style, there is no need for the old C evaluation code. This affects some other languages that were relying on the C code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * go-lang.c (go_language::expression_ops): Don't declare. * go-lang.h (class go_language) <expression_ops>: Remove. * opencl-lang.c (evaluate_subexp_opencl, exp_descriptor_opencl): Remove. (class opencl_language) <expression_ops>: Remove. * d-lang.c (class d_language) <expression_ops>: Remove. * c-lang.h (evaluate_subexp_c, exp_descriptor_c): Don't declare. * c-lang.c (evaluate_subexp_c, exp_descriptor_c): Remove. (class c_language, class cplus_language, class asm_language) (class minimal_language) <expression_ops>: Remove.
2021-03-08Remove now-unused Ada evaluator codeTom Tromey2-1760/+19
Now that the Ada parser has switched to the new style, there is no need for the old Ada evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (resolve_subexp, replace_operator_with_call) (evaluate_subexp_type, assign_aggregate) (aggregate_assign_positional, aggregate_assign_from_choices) (aggregate_assign_others, ada_evaluate_subexp_for_cast) (ada_evaluate_subexp, ADA_OPERATORS, ada_operator_length) (ada_operator_check, ada_forward_operator_length) (ada_dump_subexp_body, ada_print_subexp, ada_exp_descriptor): Remove. (post_parser): Update. (class ada_language) <expresssion_ops>: Remove.
2021-03-08Remove now-unused Modula-2 evaluator codeTom Tromey3-43/+7
Now that the Modula-2 parser has switched to the new style, there is no need for the old Modula-2 evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-lang.h (class m2_language) <expresssion_ops, exp_descriptor_modula2>: Remove. * m2-lang.c (evaluate_subexp_modula2) (m2_language::exp_descriptor_modula2): Remove.
2021-03-08Remove now-unused Fortran evaluator codeTom Tromey3-910/+10
Now that the Fortran parser has switched to the new style, there is no need for the old Fortran evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.h (class f_language) <expresssion_ops>: Remove. <exp_descriptor_tab>: Remove. * f-lang.c (fortran_value_subarray, evaluate_subexp_f) (operator_length_f, print_unop_subexp_f, print_binop_subexp_f) (print_subexp_f, dump_subexp_body_f, operator_check_f) (f_language::exp_descriptor_tab, fortran_prepare_argument): Remove.
2021-03-08Remove now-unused Rust evaluator codeTom Tromey3-516/+13
Now that the Rust parser has switched to the new style, there is no need for the old Rust evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.h (class rust_language) <expression_ops, exp_descriptor_tab>: Remove. * rust-lang.c (rust_evaluate_funcall): Remove. (rust_range, rust_subscript, eval_op_rust_complement): Don't use EVAL_SKIP. (rust_evaluate_subexp): Remove. (rust_aggregate_operation::evaluate): Don't use EVAL_SKIP. (rust_operator_length, rust_dump_subexp_body, rust_print_subexp) (rust_operator_check, rust_language::exp_descriptor_tab): Remove.
2021-03-08Convert ada-exp.y to use operationsTom Tromey4-209/+483
This converts the Ada parser to generate operations rather than exp_elements. This was the most difficult of the parser conversions, partly due to the decision to integrate Ada expression resolution into the parse, and partly due to Ada aggregregate assignment. A couple of new per-parse globals are introduced, along with a number of helper functions. Resolution is done in 'ada_pop', yielding the unfortunate rule that ada-exp.y should generally not use parser_state::pop (exceptions are marked). gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-exp.y: Create operations. (empty_stoken): Remove. (ada_pop, ada_wrap, ada_addrof, ada_un_wrap2, ada_wrap2) (ada_wrap_op, ada_wrap3, ada_funcall): New functions. (components): New global. (push_component, choice_component, pop_component, pop_components): New functions. (associations): New global (push_association, pop_association, pop_associations): New functions. (ada_parse): Update. (write_var_from_sym, write_int): Create operations. (write_exp_op_with_string): Remove. (write_object_renaming, write_selectors, write_ambiguous_var) (write_var_or_type, write_name_assoc): Create operations. * ada-lang.h (ada_index_type): Declare. * ada-lang.c (ada_index_type): No longer static.
2021-03-08Convert f-exp.y to use operationsTom Tromey4-136/+238
This converts the Fortran parser to generate operations rather than exp_elements. A couple of tests of expression debug dumping are updated to follow the new output. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-exp.y: Create operations. (f_language::parser): Update. gdb/testsuite/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdb.fortran/debug-expr.exp: Update tests.
2021-03-08Convert m2-exp.y to use operationsTom Tromey2-122/+117
This converts the Modula-2 parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-exp.y: Create operations. (m2_language::parser): Update.
2021-03-08Convert p-exp.y to use operationsTom Tromey2-142/+130
This converts the Pascal parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * p-exp.y: Create operations. (pascal_language::parser): Update.
2021-03-08Convert d-exp.y to use operationsTom Tromey2-120/+134
This converts the D parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * d-exp.y: Create operations. (d_parse): Update.
2021-03-08Convert go-exp.y to use operationsTom Tromey2-101/+117
This converts the Go parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * go-exp.y: Create operations. (go_language::parser): Update.
2021-03-08Convert c-exp.y to use operationsTom Tromey5-310/+371
This converts the C parser to generate operations rather than exp_elements. One test needed a tweak in order to handle the different debugging output. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * objc-lang.c (end_msglist): Create operations. * c-exp.y: Change parser to create operations. (write_destructor_name): Remove. (c_parse): Update. gdb/testsuite/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdb.base/debug-expr.exp: Update expected dump output.
2021-03-08Convert rust-exp.y to use operationsTom Tromey2-144/+190
This converts the Rust parser to generate operations rather than exp_elements. The Rust parser already made its own AST, that it then lowered to GDB expressions. Ironically, this made conversion trickier, rather than simpler, than the other parsers, primarily due to the way that binary operations were lowered. Perhaps in the future, converting the Rust parser to directly create operations while parsing would be worthwhile. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-exp.y: Create operations. (rust_parser::convert_params_to_expression): Change return type. (binop_maker_ftype): New typedef. (maker_map): New global. (rust_parser::convert_ast_to_expression): Change return type. (rust_language::parser): Update. (_initialize_rust_exp): Initialize maker_map.
2021-03-08Convert stap probes to create operationsTom Tromey10-291/+276
This changes the stap probe code to create operations, rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * stap-probe.c (binop_maker_ftype): New typedef. (stap_maker_map): New global. (stap_make_binop): New function. (stap_parse_register_operand): Return operation_up. (stap_parse_single_operand, stap_parse_argument_conditionally) (stap_parse_argument_1): Likewise. (stap_parse_argument): Create operations. (stap_probe::parse_arguments): Update. (_initialize_stap_probe): Initialize stap_maker_map. * ppc-linux-tdep.c (ppc_stap_parse_special_token): Change return type. * i386-tdep.h (i386_stap_parse_special_token): Change return type. * i386-tdep.c (i386_stap_parse_special_token_triplet) (i386_stap_parse_special_token_three_arg_disp) (i386_stap_parse_special_token): Change return type. * gdbarch.sh (stap_parse_special_token): Change return type. * gdbarch.c: Rebuild. * gdbarch.h: Rebuild. * arm-linux-tdep.c (arm_stap_parse_special_token): Change return type. * aarch64-linux-tdep.c (aarch64_stap_parse_special_token): Change return type.
2021-03-08Convert dtrace probes to use operationsTom Tromey6-38/+36
This changes dtrace to use the new operation type. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdbarch.sh (dtrace_parse_probe_argument): Change return type. * gdbarch.h: Rebuild. * gdbarch.c: Rebuild. * dtrace-probe.c (dtrace_probe::build_arg_exprs): Update. * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Change return type. (amd64_dtrace_parse_probe_argument): Update.
2021-03-08Add operation-related methods to parser_stateTom Tromey3-0/+200
This adds several operation-related methods to parser_state. These methods make it more convenient to change the parsers to be operation-based. Because byacc has poor support for C++, a stack of operations is added to parser_state. A parser can push operations, then later pop them for combination into new operations. This approach avoids the memory leaks that would result if raw pointers were used in the parsers, at the cost of parser productions not being type-safe (they can't indicate that they return an operation). This also introduces analogs of some write_exp functions, like write_exp_string_vector, write_dollar_variable, and write_exp_symbol_reference. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct parser_state) <push, push_new, push_c_string, push_symbol, push_dollar, pop, pop_vector, wrap, wrap2>: New methods. <m_operations>: New member. * parse.c (parser_state::push_c_string) (parser_state::push_symbol, parser_state::push_dollar): New methods.
2021-03-08Add completion for operationsTom Tromey3-2/+45
This patch adds the necessary support for field name completion for expressions using class operation. This patch takes an approach similar to what is done today. It might be good, in the future, to change completion to be a method on the base class, to enable context-sensitive completion in more areas. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct expr_completion_state) <expout_last_op>: New member. (struct parser_state) <mark_struct_expression>: New method. * parse.c (parser_state::mark_struct_expression): Update assert. (parser_state::mark_struct_expression): New method. (parser_state::mark_completion_tag): Update assert. (parse_expression_for_completion): Handle expout_last_op.
2021-03-08Add an expr::operation_up to struct expressionTom Tromey17-57/+298
This adds an expr::operation_up to struct expression, and then modifies various parts of GDB to use this member when it is non-null. The list of such spots was a bit surprising to me, and found only after writing most of the code and then noticing what no longer compiled. In a few spots, new accessor methods are added to operation subclasses, so that code that dissects an expression will work with the new scheme. After this change, code that constructs an expression can be switched to the new form without breaking. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-exp.h (class ada_var_value_operation) <get_symbol>: Remove; now in superclass. * value.h (fetch_subexp_value): Add "op" parameter. * value.c (init_if_undefined_command): Update. * tracepoint.c (validate_actionline, encode_actions_1): Update. * stap-probe.c (stap_probe::compile_to_ax): Update. * printcmd.c (set_command): Update. * ppc-linux-nat.c (ppc_linux_nat_target::check_condition): Update. * parser-defs.h (struct expr_builder) <set_operation>: New method. * parse.c (parse_exp_in_context, exp_uses_objfile): Update. * expression.h (struct expression) <first_opcode>: Update. <op>: New member. * expprint.c (dump_raw_expression, dump_prefix_expression): Update. * expop.h (class var_value_operation) <get_symbol>: New method. (class register_operation) <get_name>: New method. (class equal_operation): No longer a typedef, now a subclass. (class unop_memval_operation) <get_type>: New method. (class assign_operation) <get_lhs>: New method. (class unop_cast_operation) <get_type>: New method. * eval.c (evaluate_expression, evaluate_type) (evaluate_subexpression_type): Update. (fetch_subexp_value): Add "op" parameter. (parse_and_eval_type): Update. * dtrace-probe.c (dtrace_probe::compile_to_ax): Update. * breakpoint.c (update_watchpoint, watchpoint_check) (watchpoint_exp_is_const, watch_command_1): Update. * ax-gdb.c (gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update.
2021-03-08Remove use of op_stringTom Tromey2-1/+18
After switching to the new expression implementation, there will no need for op_string. Before deleting it, the one call outside of the expression-printing code must be removed. That is what this patch does. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_value_binop): Do not use op_string.
2021-03-08Implement Ada assignmentTom Tromey5-0/+667
Assignment is the most complicated Ada expression, because implementing aggregate assignment involves several specialized opcodes. This patch does this implementation by introducing new abstract classes that are used to represent the various parts of aggregate assignment. This makes the code somewhat cleaner, and, by avoiding the over-use of 'operation' subclasses, avoids the need for dissection using dynamic_cast (though a few are still needed here). I believe this patch fixes a latent bug in the handling of aggregate_assign_from_choices. That code does: if (op == OP_DISCRETE_RANGE) { choice_pos += 1; lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos, EVAL_NORMAL)); upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, EVAL_NORMAL)); } However, I think 'choice_pos' should be used in the calls, rather than 'pos'. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expprint.c (dump_for_expression): New overload. * expop.h (check_objfile, dump_for_expression): Declare new overloads. * ada-lang.c (check_objfile): New overload. (assign_component, ada_aggregate_component::uses_objfile) (ada_aggregate_component::dump, ada_aggregate_component::assign) (ada_aggregate_component::assign_aggregate) (ada_positional_component::uses_objfile) (ada_positional_component::dump, ada_positional_component::assign) (ada_discrete_range_association::uses_objfile) (ada_discrete_range_association::dump) (ada_discrete_range_association::assign) (ada_name_association::uses_objfile, ada_name_association::dump) (ada_name_association::assign) (ada_choices_component::uses_objfile, ada_choices_component::dump) (ada_choices_component::assign) (ada_others_component::uses_objfile, ada_others_component::dump) (ada_others_component::assign, ada_assign_operation::evaluate): New methods. * ada-exp.h (ada_string_operation) <get_name>: New method. (class ada_assign_operation): New. (class ada_component): New. (ada_component_up): New typedef. (class ada_aggregate_operation, class ada_aggregate_component) (class ada_positional_component, class ada_others_component) (class ada_association): New. (ada_association_up): New typedef. (class ada_choices_component) (class ada_discrete_range_association) (class ada_name_association): New.
2021-03-08Implement Ada resolutionTom Tromey3-3/+136
Ada has a parser post-pass that implements "resolution". This process replaces some opcodes with function calls. For example, a "+" operation might be replaced with a call to the appropriate overloaded function. This differs from the approach taken for the same problem in C++. However, in this series I chose not to try to make changes outside of rewrite the expression data structure. So, resolution remains. The new approach to resolution is to introduce an interface class, that some concrete operations implement. Then, the Ada code will use this to resolve the expression tree. Because new-style expressions are built as ordinary objects, and don't require rewriting the data structure in place, in the new code this processing will be done in the parser. By the end of the series, some special cases in this area that exist only for Ada will be removed. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_var_value_operation::resolve) (ada_funcall_operation::resolve) (ada_ternop_slice_operation::resolve): New methods. * ada-exp.h (struct ada_resolvable): New. (class ada_var_value_operation): Derive from ada_resolvable. <get_block, resolve>: New methods. (class ada_funcall_operation): Derive from ada_resolvable. <resolve>: New method. (class ada_ternop_slice_operation): Derive from ada_resolvable. <resolve>: New method.
2021-03-08Implement function calls for AdaTom Tromey3-0/+168
This implements function calls for Ada. This takes a different approach than that used for other languages, primarily because Ada requires special treatment generally. The "ordinary" special case for just the callee didn't really apply neatly here; there's only one case in Ada needing special callee treatment. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_funcall_operation::evaluate): New method. * ada-exp.h (class ada_var_msym_value_operation) <get_symbol>: New method. (class ada_funcall_operation): New.
2021-03-08Introduce ada_structop_operationTom Tromey3-0/+63
This adds class ada_structop_operation, which implements STRUCTOP_STRUCT for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_structop_operation::evaluate): New method. * ada-exp.h (class ada_structop_operation): New.
2021-03-08Introduce ada_unop_ind_operationTom Tromey3-0/+103
This adds class ada_unop_ind_operation, which implements UNOP_IND for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_ind_operation::evaluate): New method. * ada-exp.h (class ada_unop_ind_operation): New.
2021-03-08Introduce ada_binop_exp_operationTom Tromey3-2/+12
This adds class ada_binop_exp_operation, which implements BINOP_EXP for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_exp): No longer static. * ada-exp.h (ada_binop_exp_operation): New typedef.
2021-03-08Introduce ada_atr_val_operationTom Tromey3-1/+35
This adds class ada_atr_val_operation, which implements OP_ATR_VAL. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_val_atr): No longer static. (ada_atr_val_operation::evaluate): New method. * ada-exp.h (class ada_atr_val_operation): New.
2021-03-08Introduce ada_pos_operationTom Tromey3-1/+11
This adds class ada_pos_operation, a new typedef that implements OP_ATR_POS. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_pos_atr): No longer static. * ada-exp.h (ada_pos_operation): New typedef.
2021-03-08Refactor value_pos_atrTom Tromey2-8/+14
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.
2021-03-08Implement Ada min and max operationsTom Tromey3-1/+15
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.
2021-03-08Introduce ada_var_msym_value_operationTom Tromey3-0/+48
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.
2021-03-08Introduce ada_var_value_operationTom Tromey3-0/+139
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.
2021-03-08Implement some Ada OP_ATR_ operationsTom Tromey3-0/+42
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.
2021-03-08Introduce ada_binop_in_boundsTom Tromey3-1/+33
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.
2021-03-08Introduce ada_ternop_sliceTom Tromey3-1/+33
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.
2021-03-08Introduce ada_bitwise_operationTom Tromey2-0/+33
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.
2021-03-08Implement Ada equality operatorsTom Tromey3-1/+33
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.
2021-03-08Implement Ada multiplicative operatorsTom Tromey3-1/+16
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.
2021-03-08Introduce ada_binop_addsub_operationTom Tromey3-0/+61
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.
2021-03-08Split out some Ada type resolution codeTom Tromey3-99/+190
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.
2021-03-08Implement OpenCL ternary conditional operatorTom Tromey3-0/+107
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.
2021-03-08Implement OpenCL logical binary operationsTom Tromey3-0/+71
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.
2021-03-08Introduce opencl_structop_operationTom Tromey3-0/+50
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.
2021-03-08Introduce opencl_notequal_operationTom Tromey3-3/+20
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.