aboutsummaryrefslogtreecommitdiff
path: root/gdb/parser-defs.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-03-31 17:20:24 -0600
committerTom Tromey <tom@tromey.com>2019-04-04 19:55:11 -0600
commit699bd4cfa8895d0767d491a3e44ac09d3f4d1801 (patch)
tree6f0f6dea3ef2cd37f4e0b9173d38431b27df17fd /gdb/parser-defs.h
parentdac43e327d002107f6bc9481749de039f410df73 (diff)
downloadgdb-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.h34
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);