aboutsummaryrefslogtreecommitdiff
path: root/gdb/parser-defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/parser-defs.h')
-rw-r--r--gdb/parser-defs.h39
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);