From 562db568441ed0f7e258b843916c34572170cc6d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 28 Apr 2023 08:01:54 -0600 Subject: [PATCH] Move innermost_block_tracker to expression.h I think parser-defs.h should hold declarations that can be used by parser implementations, whereas expression.h should hold declarations that are used by code that wants to call a parser. Following this logic, this patch moves innermost_block_tracker to expression.h. --- gdb/expression.h | 46 ++++++++++++++++++++++++++++++++++++++++++++-- gdb/parser-defs.h | 43 ------------------------------------------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/gdb/expression.h b/gdb/expression.h index e6e4bec2e80..8d351b30a3a 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -21,6 +21,7 @@ #define EXPRESSION_H 1 #include "gdbtypes.h" +#include "symtab.h" /* While parsing expressions we need to track the innermost lexical block that we encounter. In some situations we need to track the innermost @@ -239,9 +240,51 @@ struct expression typedef std::unique_ptr expression_up; +/* When parsing expressions we track the innermost block that was + referenced. */ + +class innermost_block_tracker +{ +public: + innermost_block_tracker (innermost_block_tracker_types types + = INNERMOST_BLOCK_FOR_SYMBOLS) + : m_types (types), + m_innermost_block (NULL) + { /* Nothing. */ } + + /* 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 + register. The stored innermost block is only updated if the type T is + a type we are interested in, the types we are interested in are held + in M_TYPES and set during RESET. */ + void update (const struct block *b, innermost_block_tracker_types t); + + /* Overload of main UPDATE method which extracts the block from BS. */ + void update (const struct block_symbol &bs) + { + update (bs.block, INNERMOST_BLOCK_FOR_SYMBOLS); + } + + /* Return the stored innermost block. Can be nullptr if no symbols or + registers were found during an expression parse, and so no innermost + block was defined. */ + const struct block *block () const + { + return m_innermost_block; + } + +private: + /* The type of innermost block being looked for. */ + innermost_block_tracker_types m_types; + + /* The currently stored innermost block found while parsing an + expression. */ + const struct block *m_innermost_block; +}; + /* From parse.c */ -class innermost_block_tracker; extern expression_up parse_expression (const char *, innermost_block_tracker * = nullptr, bool void_context_p = false); @@ -270,7 +313,6 @@ struct expr_completion_base extern expression_up parse_expression_for_completion (const char *, std::unique_ptr *completer); -class innermost_block_tracker; extern expression_up parse_exp_1 (const char **, CORE_ADDR pc, const struct block *, int, innermost_block_tracker * = nullptr); diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 62829a86f9a..5c6bc222b6b 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -316,49 +316,6 @@ private: std::vector m_operations; }; -/* When parsing expressions we track the innermost block that was - referenced. */ - -class innermost_block_tracker -{ -public: - innermost_block_tracker (innermost_block_tracker_types types - = INNERMOST_BLOCK_FOR_SYMBOLS) - : m_types (types), - m_innermost_block (NULL) - { /* Nothing. */ } - - /* 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 - register. The stored innermost block is only updated if the type T is - a type we are interested in, the types we are interested in are held - in M_TYPES and set during RESET. */ - void update (const struct block *b, innermost_block_tracker_types t); - - /* Overload of main UPDATE method which extracts the block from BS. */ - void update (const struct block_symbol &bs) - { - update (bs.block, INNERMOST_BLOCK_FOR_SYMBOLS); - } - - /* Return the stored innermost block. Can be nullptr if no symbols or - registers were found during an expression parse, and so no innermost - block was defined. */ - const struct block *block () const - { - return m_innermost_block; - } - -private: - /* The type of innermost block being looked for. */ - innermost_block_tracker_types m_types; - - /* The currently stored innermost block found while parsing an - expression. */ - const struct block *m_innermost_block; -}; - /* A string token, either a char-string or bit-string. Char-strings are used, for example, for the names of symbols. */ -- 2.30.2