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.
This commit is contained in:
parent
98d630e910
commit
562db56844
2 changed files with 44 additions and 45 deletions
|
@ -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);
|
||||
|
|
|
@ -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. */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue