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/parse.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/parse.c')
-rw-r--r-- | gdb/parse.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/gdb/parse.c b/gdb/parse.c index 89a29f0..359f6f8 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -65,10 +65,6 @@ const struct exp_descriptor exp_descriptor_standard = evaluate_subexp_standard }; -/* Global variables declared in parser-defs.h (and commented there). */ -innermost_block_tracker innermost_block; - - static unsigned int expressiondebug = 0; static void show_expressiondebug (struct ui_file *file, int from_tty, @@ -95,7 +91,7 @@ static int prefixify_subexp (struct expression *, struct expression *, int, static expression_up parse_exp_in_context (const char **, CORE_ADDR, const struct block *, int, int, int *, - innermost_block_tracker_types, + innermost_block_tracker *, expr_completion_state *); static void increase_expout_size (struct expr_builder *ps, size_t lenelt); @@ -637,8 +633,8 @@ handle_register: str.ptr++; write_exp_string (ps, str); write_exp_elt_opcode (ps, OP_REGISTER); - innermost_block.update (ps->expression_context_block, - INNERMOST_BLOCK_FOR_REGISTERS); + ps->block_tracker->update (ps->expression_context_block, + INNERMOST_BLOCK_FOR_REGISTERS); return; } @@ -1049,10 +1045,10 @@ prefixify_subexp (struct expression *inexpr, expression_up parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block, - int comma, innermost_block_tracker_types tracker_types) + int comma, innermost_block_tracker *tracker) { return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL, - tracker_types, nullptr); + tracker, nullptr); } /* As for parse_exp_1, except that if VOID_CONTEXT_P, then @@ -1066,20 +1062,22 @@ static expression_up parse_exp_in_context (const char **stringptr, CORE_ADDR pc, const struct block *block, int comma, int void_context_p, int *out_subexp, - innermost_block_tracker_types tracker_types, + innermost_block_tracker *tracker, expr_completion_state *cstate) { const struct language_defn *lang = NULL; int subexp; - innermost_block.reset (tracker_types); - if (*stringptr == 0 || **stringptr == 0) error_no_arg (_("expression to compute")); const struct block *expression_context_block = block; CORE_ADDR expression_context_pc = 0; + innermost_block_tracker local_tracker; + if (tracker == nullptr) + tracker = &local_tracker; + /* If no context specified, try using the current frame, if any. */ if (!expression_context_block) expression_context_block = get_selected_block (&expression_context_pc); @@ -1134,7 +1132,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc, parser_state ps (lang, get_current_arch (), expression_context_block, expression_context_pc, comma, *stringptr, - cstate != nullptr); + cstate != nullptr, tracker); scoped_restore_current_language lang_saver; set_language (lang->la_language); @@ -1169,7 +1167,8 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc, if (out_subexp) *out_subexp = subexp; - lang->la_post_parser (&result, void_context_p, ps.parse_completion); + lang->la_post_parser (&result, void_context_p, ps.parse_completion, + tracker); if (expressiondebug) dump_prefix_expression (result.get (), gdb_stdlog); @@ -1184,9 +1183,9 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc, to use up all of the contents of STRING. */ expression_up -parse_expression (const char *string) +parse_expression (const char *string, innermost_block_tracker *tracker) { - expression_up exp = parse_exp_1 (&string, 0, 0, 0); + expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker); if (*string) error (_("Junk after end of expression.")); return exp; @@ -1228,7 +1227,7 @@ parse_expression_for_completion (const char *string, TRY { exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp, - INNERMOST_BLOCK_FOR_SYMBOLS, &cstate); + nullptr, &cstate); } CATCH (except, RETURN_MASK_ERROR) { @@ -1267,7 +1266,8 @@ parse_expression_for_completion (const char *string, /* A post-parser that does nothing. */ void -null_post_parser (expression_up *exp, int void_context_p, int completin) +null_post_parser (expression_up *exp, int void_context_p, int completin, + innermost_block_tracker *tracker) { } |