[08/13] Move comma_terminates global to parser_state

Message ID 20190403013805.11978-9-tom@tromey.com
State New
Headers show
Series
  • Remove parser-related globals
Related show

Commit Message

Tom Tromey April 3, 2019, 1:38 a.m.
This moves the comma_terminates global to parser_state.

2019-04-02  Tom Tromey  <tom@tromey.com>

	* rust-exp.y (rustyylex, rust_lex_tests): Update.
	* parser-defs.h (struct parser_state) <parser_state>: Add new
	parameter.
	<comma_terminates>: New member.
	(comma_terminates): Don't declare global.
	* parse.c (comma_terminates): Remove global.
	(parse_exp_in_context): Update.
	* p-exp.y (yylex): Update.
	* m2-exp.y (yylex): Update.
	* go-exp.y (lex_one_token): Update.
	* f-exp.y (yylex): Update.
	* d-exp.y (lex_one_token): Update.
	* c-exp.y (lex_one_token): Update.
	* ada-lex.l: Update.
---
 gdb/ChangeLog     | 17 +++++++++++++++++
 gdb/ada-lex.l     |  2 +-
 gdb/c-exp.y       |  2 +-
 gdb/d-exp.y       |  2 +-
 gdb/f-exp.y       |  2 +-
 gdb/go-exp.y      |  2 +-
 gdb/m2-exp.y      |  2 +-
 gdb/p-exp.y       |  2 +-
 gdb/parse.c       |  5 +----
 gdb/parser-defs.h | 14 ++++++++------
 gdb/rust-exp.y    |  5 +++--
 11 files changed, 36 insertions(+), 19 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
index 6163405545d..43bd25c1e2f 100644
--- a/gdb/ada-lex.l
+++ b/gdb/ada-lex.l
@@ -232,7 +232,7 @@  false		{ return FALSEKEYWORD; }
 
 [-&*+./:<>=|;\[\]] { return yytext[0]; }
 
-","		{ if (paren_depth == 0 && comma_terminates)
+","		{ if (paren_depth == 0 && pstate->comma_terminates)
 		    {
 		      rewind_to_char (',');
 		      return 0;
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index cb9e9e002c7..16b291f9c70 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -2637,7 +2637,7 @@  lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
       return c;
 
     case ',':
-      if (comma_terminates
+      if (pstate->comma_terminates
           && paren_depth == 0
           && ! scanning_macro_expansion ())
 	return 0;
diff --git a/gdb/d-exp.y b/gdb/d-exp.y
index c1519953521..06e12e32011 100644
--- a/gdb/d-exp.y
+++ b/gdb/d-exp.y
@@ -1098,7 +1098,7 @@  lex_one_token (struct parser_state *par_state)
       return c;
 
     case ',':
-      if (comma_terminates && paren_depth == 0)
+      if (pstate->comma_terminates && paren_depth == 0)
 	return 0;
       lexptr++;
       return c;
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 100a3bbec14..522751d2263 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -1115,7 +1115,7 @@  yylex (void)
       return c;
       
     case ',':
-      if (comma_terminates && paren_depth == 0)
+      if (pstate->comma_terminates && paren_depth == 0)
 	return 0;
       lexptr++;
       return c;
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
index aaffe3d45a0..ea1487cb008 100644
--- a/gdb/go-exp.y
+++ b/gdb/go-exp.y
@@ -1077,7 +1077,7 @@  lex_one_token (struct parser_state *par_state)
       return c;
 
     case ',':
-      if (comma_terminates
+      if (pstate->comma_terminates
           && paren_depth == 0)
 	return 0;
       lexptr++;
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
index c0f5e75be2a..2174014e79a 100644
--- a/gdb/m2-exp.y
+++ b/gdb/m2-exp.y
@@ -819,7 +819,7 @@  yylex (void)
       return c;
 
     case ',':
-      if (comma_terminates && paren_depth == 0)
+      if (pstate->comma_terminates && paren_depth == 0)
 	return 0;
       lexptr++;
       return c;
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index 768f3025921..65874c6327d 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -1218,7 +1218,7 @@  yylex (void)
       return c;
 
     case ',':
-      if (comma_terminates && paren_depth == 0)
+      if (pstate->comma_terminates && paren_depth == 0)
 	return 0;
       lexptr++;
       return c;
diff --git a/gdb/parse.c b/gdb/parse.c
index 4ac79faaeae..617ff70d67e 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -71,7 +71,6 @@  int arglist_len;
 static struct type_stack type_stack;
 const char *lexptr;
 const char *prev_lexptr;
-int comma_terminates;
 
 /* True if parsing an expression to attempt completion.  */
 int parse_completion;
@@ -1122,8 +1121,6 @@  parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
   expout_completion_name.reset ();
   innermost_block.reset (tracker_types);
 
-  comma_terminates = comma;
-
   if (lexptr == 0 || *lexptr == 0)
     error_no_arg (_("expression to compute"));
 
@@ -1187,7 +1184,7 @@  parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
      to the value matching SELECTED_FRAME as set by get_current_arch.  */
 
   parser_state ps (lang, get_current_arch (), expression_context_block,
-		   expression_context_pc);
+		   expression_context_pc, comma);
 
   scoped_restore_current_language lang_saver;
   set_language (lang->la_language);
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
index 6fb0f8e5533..f2bb18fd9c7 100644
--- a/gdb/parser-defs.h
+++ b/gdb/parser-defs.h
@@ -88,10 +88,12 @@  struct parser_state : public expr_builder
   parser_state (const struct language_defn *lang,
 		struct gdbarch *gdbarch,
 		const struct block *context_block,
-		CORE_ADDR context_pc)
+		CORE_ADDR context_pc,
+		int comma)
     : expr_builder (lang, gdbarch),
       expression_context_block (context_block),
-      expression_context_pc (context_pc)
+      expression_context_pc (context_pc),
+      comma_terminates (comma)
   {
   }
 
@@ -108,6 +110,10 @@  struct parser_state : public expr_builder
      at, and then look up the macro definitions active at that
      point.  */
   const CORE_ADDR expression_context_pc;
+
+  /* Nonzero means stop parsing on first comma (if not within parentheses).  */
+
+  int comma_terminates;
 };
 
 /* When parsing expressions we track the innermost block that was
@@ -355,10 +361,6 @@  extern const char *lexptr;
 /* After a token has been recognized, this variable points to it.
    Currently used only for error reporting.  */
 extern const char *prev_lexptr;
-
-/* Nonzero means stop parsing on first comma (if not within parentheses).  */
-
-extern int comma_terminates;
 
 /* These codes indicate operator precedences for expression printing,
    least tightly binding first.  */
diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
index 9d3083ead92..2f2cc8f31fe 100644
--- a/gdb/rust-exp.y
+++ b/gdb/rust-exp.y
@@ -1674,7 +1674,8 @@  rustyylex (YYSTYPE *lvalp, rust_parser *parser)
       /* Falls through to lex_operator.  */
       ++parser->paren_depth;
     }
-  else if (lexptr[0] == ',' && comma_terminates && parser->paren_depth == 0)
+  else if (lexptr[0] == ',' && parser->pstate->comma_terminates
+	   && parser->paren_depth == 0)
     return 0;
 
   return lex_operator (lvalp);
@@ -2713,7 +2714,7 @@  rust_lex_tests (void)
 
   // Set up dummy "parser", so that rust_type works.
   struct parser_state ps (&rust_language_defn, target_gdbarch (),
-			  nullptr, 0);
+			  nullptr, 0, 0);
   rust_parser parser (&ps);
 
   rust_lex_test_one (&parser, "", 0);