Have parser reset the innermost block tracker
authorTom Tromey <tom@tromey.com>
Sat, 23 Mar 2019 16:11:51 +0000 (10:11 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 23 Mar 2019 16:59:10 +0000 (10:59 -0600)
commit7ad417dd217849c164e3c8a250c62a98eb0b8cd4
tree7c5a868ea6aa91f34146092c15dd550986086218
parentb366c208ee07924cc3cafc1bd4d70548bc91075b
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.
gdb/ChangeLog
gdb/breakpoint.c
gdb/expression.h
gdb/objfiles.c
gdb/parse.c
gdb/parser-defs.h
gdb/printcmd.c
gdb/symfile.c
gdb/varobj.c