X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fparser-defs.h;h=d6c3b068978efed010263ad85cdea2460344fd50;hb=975f8708de015fb2b813edbf8b714f4777c57a41;hp=edbd3b7b673254e8cdff0050ac4ea4f857a7fb0a;hpb=dac43e327d002107f6bc9481749de039f410df73;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index edbd3b7b67..d6c3b06897 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -1,6 +1,6 @@ /* Parser definitions for GDB. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. Modified from expread.y by the Department of Computer Science at the State University of New York at Buffalo. @@ -23,14 +23,15 @@ #if !defined (PARSER_DEFS_H) #define PARSER_DEFS_H 1 -#include "common/vec.h" #include "expression.h" +#include "symtab.h" struct block; struct language_defn; struct internalvar; +class innermost_block_tracker; -extern int parser_debug; +extern bool parser_debug; /* A class that can be used to build a "struct expression". */ @@ -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. */ @@ -340,7 +331,7 @@ extern void write_dollar_variable (struct parser_state *, struct stoken str); extern const char *find_template_name_end (const char *); -extern char *copy_name (struct stoken); +extern std::string copy_name (struct stoken); extern int dump_subexp (struct expression *, struct ui_file *, int); @@ -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);