]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Move "assignments" global into ada_parse_state
authorTom Tromey <tromey@adacore.com>
Thu, 14 Mar 2024 18:17:30 +0000 (12:17 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 2 Apr 2024 17:24:27 +0000 (11:24 -0600)
This patch moves the "assignments" global into ada_parse_state.

gdb/ada-exp.y

index be726eccbe2d78948faeff52954741fbac5942ff..207fdcb270788a227a2f6e55bac40320578f8e58 100644 (file)
@@ -66,6 +66,9 @@ static struct parser_state *pstate = NULL;
 
 using namespace expr;
 
+/* A convenience typedef.  */
+typedef std::unique_ptr<ada_assign_operation> ada_assign_up;
+
 /* Data that must be held for the duration of a parse.  */
 
 struct ada_parse_state
@@ -89,6 +92,10 @@ struct ada_parse_state
   /* The associations being constructed during this parse.  */
   std::vector<ada_association_up> associations;
 
+  /* The stack of currently active assignment expressions.  This is used
+     to implement '@', the target name symbol.  */
+  std::vector<ada_assign_up> assignments;
+
 private:
 
   /* We don't have a good way to manage non-POD data in Yacc, so store
@@ -436,13 +443,6 @@ make_tick_completer (struct stoken tok)
          (new ada_tick_completer (std::string (tok.ptr, tok.length))));
 }
 
-/* A convenience typedef.  */
-typedef std::unique_ptr<ada_assign_operation> ada_assign_up;
-
-/* The stack of currently active assignment expressions.  This is used
-   to implement '@', the target name symbol.  */
-static std::vector<ada_assign_up> assignments;
-
 /* Track currently active iterated assignment names.  */
 static std::unordered_map<std::string, std::vector<ada_index_var_operation *>>
      iterated_associations;
@@ -527,14 +527,14 @@ exp1      :       exp
                        { ada_wrap2<comma_operation> (BINOP_COMMA); }
        |       primary ASSIGN
                        {
-                         assignments.emplace_back
+                         ada_parser->assignments.emplace_back
                            (new ada_assign_operation (ada_pop (), nullptr));
                        }
                exp   /* Extension for convenience */
                        {
                          ada_assign_up assign
-                           = std::move (assignments.back ());
-                         assignments.pop_back ();
+                           = std::move (ada_parser->assignments.back ());
+                         ada_parser->assignments.pop_back ();
                          value *lhs_val = (assign->eval_for_resolution
                                            (pstate->expout.get ()));
 
@@ -645,11 +645,11 @@ primary :         aggregate
 
 primary :      '@'
                        {
-                         if (assignments.empty ())
+                         if (ada_parser->assignments.empty ())
                            error (_("the target name symbol ('@') may only "
                                     "appear in an assignment context"));
                          ada_assign_operation *current
-                           = assignments.back ().get ();
+                           = ada_parser->assignments.back ().get ();
                          pstate->push_new<ada_target_operation> (current);
                        }
        ;
@@ -1256,7 +1256,6 @@ ada_parse (struct parser_state *par_state)
   lexer_init (yyin);           /* (Re-)initialize lexer.  */
   obstack_free (&temp_parse_space, NULL);
   obstack_init (&temp_parse_space);
-  assignments.clear ();
   iterated_associations.clear ();
 
   int result = yyparse ();