diff options
author | Tom Tromey <tom@tromey.com> | 2019-03-31 17:20:24 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-04-04 19:55:11 -0600 |
commit | 699bd4cfa8895d0767d491a3e44ac09d3f4d1801 (patch) | |
tree | 6f0f6dea3ef2cd37f4e0b9173d38431b27df17fd /gdb/ada-lang.c | |
parent | dac43e327d002107f6bc9481749de039f410df73 (diff) | |
download | binutils-699bd4cfa8895d0767d491a3e44ac09d3f4d1801.zip binutils-699bd4cfa8895d0767d491a3e44ac09d3f4d1801.tar.gz binutils-699bd4cfa8895d0767d491a3e44ac09d3f4d1801.tar.bz2 |
Move innermost_block_tracker global to parse_state
This changes the parsing API so that callers that are interested in
tracking the innermost block must instantiate an
innermost_block_tracker and pass it in. Then, a pointer to this
object is stored in the parser_state.
2019-04-04 Tom Tromey <tom@tromey.com>
* varobj.c (varobj_create): Update.
* rust-exp.y (struct rust_parser) <update_innermost_block,
lookup_symbol>: New methods.
(rust_parser::update_innermost_block, rust_parser::lookup_symbol):
Rename.
(rust_parser::rust_lookup_type)
(rust_parser::convert_ast_to_expression, rust_lex_tests): Update.
* printcmd.c (display_command, do_one_display): Update.
* parser-defs.h (struct parser_state) <parser_state>: Add
"tracker" parameter.
(block_tracker): New member.
(class innermost_block_tracker) <innermost_block_tracker>: Add
"types" parameter.
<reset>: Remove method.
(innermost_block): Don't declare.
(null_post_parser): Update.
* parse.c (innermost_block): Remove global.
(write_dollar_variable): Update.
(parse_exp_1, parse_exp_in_context): Add "tracker" parameter.
Remove "tracker_types" parameter.
(parse_expression): Add "tracker" parameter.
(parse_expression_for_completion): Update.
(null_post_parser): Add "tracker" parameter.
* p-exp.y: Update rules.
* m2-exp.y: Update rules.
* language.h (struct language_defn) <la_post_parser>: Add
"tracker" parameter.
* go-exp.y: Update rules.
* f-exp.y: Update rules.
* expression.h (parse_expression, parse_exp_1): Add "tracker"
parameter.
* d-exp.y: Update rules.
* c-exp.y: Update rules.
* breakpoint.c (set_breakpoint_condition): Create an
innermost_block_tracker.
(watch_command_1): Likewise.
* ada-lang.c (resolve): Add "tracker" parameter.
(resolve_subexp): Likewise.
* ada-exp.y (write_var_from_sym): Update.
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r-- | gdb/ada-lang.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 6e1c2cb..51615dc 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -125,7 +125,8 @@ static int num_defns_collected (struct obstack *); static struct block_symbol *defns_collected (struct obstack *, int); static struct value *resolve_subexp (expression_up *, int *, int, - struct type *, int); + struct type *, int, + innermost_block_tracker *); static void replace_operator_with_call (expression_up *, int, int, int, struct symbol *, const struct block *); @@ -3220,7 +3221,8 @@ ada_decoded_op_name (enum exp_opcode op) return type is preferred. May change (expand) *EXP. */ static void -resolve (expression_up *expp, int void_context_p, int parse_completion) +resolve (expression_up *expp, int void_context_p, int parse_completion, + innermost_block_tracker *tracker) { struct type *context_type = NULL; int pc = 0; @@ -3228,7 +3230,7 @@ resolve (expression_up *expp, int void_context_p, int parse_completion) if (void_context_p) context_type = builtin_type ((*expp)->gdbarch)->builtin_void; - resolve_subexp (expp, &pc, 1, context_type, parse_completion); + resolve_subexp (expp, &pc, 1, context_type, parse_completion, tracker); } /* Resolve the operator of the subexpression beginning at @@ -3242,7 +3244,8 @@ resolve (expression_up *expp, int void_context_p, int parse_completion) static struct value * resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, - struct type *context_type, int parse_completion) + struct type *context_type, int parse_completion, + innermost_block_tracker *tracker) { int pc = *pos; int i; @@ -3267,20 +3270,20 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, else { *pos += 3; - resolve_subexp (expp, pos, 0, NULL, parse_completion); + resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker); } nargs = longest_to_int (exp->elts[pc + 1].longconst); break; case UNOP_ADDR: *pos += 1; - resolve_subexp (expp, pos, 0, NULL, parse_completion); + resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker); break; case UNOP_QUAL: *pos += 3; resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type), - parse_completion); + parse_completion, tracker); break; case OP_ATR_MODULUS: @@ -3311,11 +3314,12 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, struct value *arg1; *pos += 1; - arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion); + arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker); if (arg1 == NULL) - resolve_subexp (expp, pos, 1, NULL, parse_completion); + resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker); else - resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion); + resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion, + tracker); break; } @@ -3403,7 +3407,8 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, argvec = XALLOCAVEC (struct value *, nargs + 1); for (i = 0; i < nargs; i += 1) - argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion); + argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion, + tracker); argvec[i] = NULL; exp = expp->get (); @@ -3487,7 +3492,7 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, exp->elts[pc + 1].block = candidates[i].block; exp->elts[pc + 2].symbol = candidates[i].symbol; - innermost_block.update (candidates[i]); + tracker->update (candidates[i]); } if (deprocedure_p @@ -3531,7 +3536,7 @@ resolve_subexp (expression_up *expp, int *pos, int deprocedure_p, exp->elts[pc + 4].block = candidates[i].block; exp->elts[pc + 5].symbol = candidates[i].symbol; - innermost_block.update (candidates[i]); + tracker->update (candidates[i]); } } break; |