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/parser-defs.h | |
parent | dac43e327d002107f6bc9481749de039f410df73 (diff) | |
download | gdb-699bd4cfa8895d0767d491a3e44ac09d3f4d1801.zip gdb-699bd4cfa8895d0767d491a3e44ac09d3f4d1801.tar.gz gdb-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/parser-defs.h')
-rw-r--r-- | gdb/parser-defs.h | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index edbd3b7..5244842 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -29,6 +29,7 @@ struct block; struct language_defn; struct internalvar; +class innermost_block_tracker; extern int parser_debug; @@ -107,13 +108,15 @@ struct parser_state : public expr_builder CORE_ADDR context_pc, int comma, const char *input, - int completion) + int completion, + innermost_block_tracker *tracker) : expr_builder (lang, gdbarch), expression_context_block (context_block), expression_context_pc (context_pc), comma_terminates (comma), lexptr (input), - parse_completion (completion) + parse_completion (completion), + block_tracker (tracker) { } @@ -186,6 +189,9 @@ struct parser_state : public expr_builder /* Completion state is updated here. */ expr_completion_state m_completion_state; + /* The innermost block tracker. */ + innermost_block_tracker *block_tracker; + private: /* Data structure for saving values of arglist_len for function calls whose @@ -200,21 +206,12 @@ private: class innermost_block_tracker { public: - innermost_block_tracker () - : m_types (INNERMOST_BLOCK_FOR_SYMBOLS), + innermost_block_tracker (innermost_block_tracker_types types + = INNERMOST_BLOCK_FOR_SYMBOLS) + : m_types (types), m_innermost_block (NULL) { /* Nothing. */ } - /* Reset the currently stored innermost block. Usually called before - parsing a new expression. As the most common case is that we only - want to gather the innermost block for symbols in an expression, this - becomes the default block tracker type. */ - void reset (innermost_block_tracker_types t = INNERMOST_BLOCK_FOR_SYMBOLS) - { - m_types = t; - m_innermost_block = NULL; - } - /* Update the stored innermost block if the new block B is more inner than the currently stored block, or if no block is stored yet. The type T tells us whether the block B was for a symbol or for a @@ -246,12 +243,6 @@ private: const struct block *m_innermost_block; }; -/* The innermost context required by the stack and register variables - we've encountered so far. This is cleared by the expression - parsing functions before parsing an expression, and can queried - once the parse is complete. */ -extern innermost_block_tracker innermost_block; - /* A string token, either a char-string or bit-string. Char-strings are used, for example, for the names of symbols. */ @@ -359,7 +350,8 @@ extern int operator_check_standard (struct expression *exp, int pos, extern const char *op_name_standard (enum exp_opcode); -extern void null_post_parser (expression_up *, int, int); +extern void null_post_parser (expression_up *, int, int, + innermost_block_tracker *); extern bool parse_float (const char *p, int len, const struct type *type, gdb_byte *data); |