Have parser reset the innermost block tracker
I ran across a comment in symfile.c today: /* Clear globals which might have pointed into a removed objfile. FIXME: It's not clear which of these are supposed to persist between expressions and which ought to be reset each time. */ It seems to me that this can be clarified: the parser entry points ought to reset the innermost block tracker (and the expression context block), and these should not be considered valid for code to use at arbitrary times -- only immediately after an expression has been parsed. This patch implements this idea. This could be further improved by removing the parser globals and changing the parser functions to return this information, but I have not done this. Tested by the buildbot. gdb/ChangeLog 2019-03-23 Tom Tromey <tom@tromey.com> * varobj.c (varobj_create): Update. * symfile.c (clear_symtab_users): Don't reset innermost_block. * printcmd.c (display_command, do_one_display): Don't reset innermost_block. * parser-defs.h (enum innermost_block_tracker_type): Move to expression.h. (innermost_block): Update comment. * parse.c (parse_exp_1): Add tracker_types parameter. (parse_exp_in_context): Rename from parse_exp_in_context_1. Add tracker_types parameter. Reset innermost_block. (parse_exp_in_context): Remove. (parse_expression_for_completion): Update. * objfiles.c (~objfile): Don't reset expression_context_block or innermost_block. * expression.h (enum innermost_block_tracker_type): Move from parser-defs.h. (parse_exp_1): Add tracker_types parameter. * breakpoint.c (set_breakpoint_condition, watch_command_1): Don't reset innermost_block.
This commit is contained in:
parent
b366c208ee
commit
7ad417dd21
9 changed files with 60 additions and 60 deletions
|
@ -670,12 +670,6 @@ objfile::~objfile ()
|
|||
for example), so we need to call this here. */
|
||||
clear_pc_function_cache ();
|
||||
|
||||
/* Clear globals which might have pointed into a removed objfile.
|
||||
FIXME: It's not clear which of these are supposed to persist
|
||||
between expressions and which ought to be reset each time. */
|
||||
expression_context_block = NULL;
|
||||
innermost_block.reset ();
|
||||
|
||||
/* Check to see if the current_source_symtab belongs to this objfile,
|
||||
and if so, call clear_current_source_symtab_and_line. */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue