public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom Tromey <tromey@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Move innermost_block_tracker to expression.h Date: Tue, 23 May 2023 20:18:16 +0000 (GMT) [thread overview] Message-ID: <20230523201816.95A7D3858C3A@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=562db568441ed0f7e258b843916c34572170cc6d commit 562db568441ed0f7e258b843916c34572170cc6d Author: Tom Tromey <tromey@adacore.com> Date: Fri Apr 28 08:01:54 2023 -0600 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. Diff: --- 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> 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<expr_completion_base> *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<expr::operation_up> 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. */
reply other threads:[~2023-05-23 20:18 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230523201816.95A7D3858C3A@sourceware.org \ --to=tromey@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).