diff options
Diffstat (limited to 'gdb/parser-defs.h')
-rw-r--r-- | gdb/parser-defs.h | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 66828e0..a015115 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -101,6 +101,27 @@ struct parser_state : public expr_builder DISABLE_COPY_AND_ASSIGN (parser_state); + /* Begin counting arguments for a function call, + saving the data about any containing call. */ + + void start_arglist () + { + m_funcall_chain.push_back (arglist_len); + arglist_len = 0; + } + + /* Return the number of arguments in a function call just terminated, + and restore the data for the containing function call. */ + + int end_arglist () + { + int val = arglist_len; + arglist_len = m_funcall_chain.back (); + m_funcall_chain.pop_back (); + return val; + } + + /* If this is nonzero, this block is used as the lexical context for symbol names. */ @@ -125,6 +146,17 @@ struct parser_state : public expr_builder /* After a token has been recognized, this variable points to it. Currently used only for error reporting. */ const char *prev_lexptr = nullptr; + + /* Number of arguments seen so far in innermost function call. */ + + int arglist_len = 0; + +private: + + /* Data structure for saving values of arglist_len for function calls whose + arguments contain other function calls. */ + + std::vector<int> m_funcall_chain; }; /* When parsing expressions we track the innermost block that was @@ -185,9 +217,6 @@ private: once the parse is complete. */ extern innermost_block_tracker innermost_block; -/* Number of arguments seen so far in innermost function call. */ -extern int arglist_len; - /* A string token, either a char-string or bit-string. Char-strings are used, for example, for the names of symbols. */ @@ -311,10 +340,6 @@ extern void mark_struct_expression (struct expr_builder *); extern const char *find_template_name_end (const char *); -extern void start_arglist (void); - -extern int end_arglist (void); - extern char *copy_name (struct stoken); extern void insert_type (enum type_pieces); |