aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/c-exp.y43
-rw-r--r--gdb/d-exp.y62
-rw-r--r--gdb/go-exp.y24
4 files changed, 74 insertions, 67 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1120d8d..3381304 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,15 @@
+2018-08-28 Tom Tromey <tom@tromey.com>
+
+ * c-exp.y (struct token_and_value): Remove typedef and DEF_VEC.
+ (token_fifo): Now a std::vector.
+ (yylex, c_parse): Update.
+ * d-exp.y (struct token_and_value): Remove typedef and DEF_VEC.
+ (token_fifo): Now a std::vector.
+ (yylex, d_parse): Update.
+ * go-exp.y (struct token_and_value): Remove typedef and DEF_VEC.
+ (token_fifo): Now a std::vector.
+ (yylex, go_parse): Update.
+
2018-08-28 Simon Marchi <simon.marchi@ericsson.com>
* parser-defs.h (struct type_stack) <elements>: Change type to
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index a9ccbdc..0326ee0 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -2854,17 +2854,15 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
-typedef struct
+struct token_and_value
{
int token;
YYSTYPE value;
-} token_and_value;
-
-DEF_VEC_O (token_and_value);
+};
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
-static VEC (token_and_value) *token_fifo;
+static std::vector<token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@@ -3089,7 +3087,7 @@ yylex (void)
const struct block *search_block;
bool is_quoted_name, last_lex_was_structop;
- if (popping && !VEC_empty (token_and_value, token_fifo))
+ if (popping && !token_fifo.empty ())
goto do_pop;
popping = 0;
@@ -3110,7 +3108,7 @@ yylex (void)
/* Read any sequence of alternating "::" and name-like tokens into
the token FIFO. */
current.value = yylval;
- VEC_safe_push (token_and_value, token_fifo, &current);
+ token_fifo.push_back (current);
last_was_coloncolon = current.token == COLONCOLON;
while (1)
{
@@ -3120,7 +3118,7 @@ yylex (void)
Subsequent ones do not have any special meaning. */
current.token = lex_one_token (pstate, &ignore);
current.value = yylval;
- VEC_safe_push (token_and_value, token_fifo, &current);
+ token_fifo.push_back (current);
if ((last_was_coloncolon && current.token != NAME)
|| (!last_was_coloncolon && current.token != COLONCOLON))
@@ -3131,10 +3129,10 @@ yylex (void)
/* We always read one extra token, so compute the number of tokens
to examine accordingly. */
- last_to_examine = VEC_length (token_and_value, token_fifo) - 2;
+ last_to_examine = token_fifo.size () - 2;
next_to_examine = 0;
- current = *VEC_index (token_and_value, token_fifo, next_to_examine);
+ current = token_fifo[next_to_examine];
++next_to_examine;
name_obstack.clear ();
@@ -3158,16 +3156,16 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
- token_and_value *next;
+ token_and_value next;
- next = VEC_index (token_and_value, token_fifo, next_to_examine);
+ next = token_fifo[next_to_examine];
++next_to_examine;
- if (next->token == NAME && last_was_coloncolon)
+ if (next.token == NAME && last_was_coloncolon)
{
int classification;
- yylval = next->value;
+ yylval = next.value;
classification = classify_inner_name (pstate, search_block,
context_type);
/* We keep going until we either run out of names, or until
@@ -3184,8 +3182,8 @@ yylex (void)
/* We don't want to put a leading "::" into the name. */
obstack_grow_str (&name_obstack, "::");
}
- obstack_grow (&name_obstack, next->value.sval.ptr,
- next->value.sval.length);
+ obstack_grow (&name_obstack, next.value.sval.ptr,
+ next.value.sval.length);
yylval.sval.ptr = (const char *) obstack_base (&name_obstack);
yylval.sval.length = obstack_object_size (&name_obstack);
@@ -3199,7 +3197,7 @@ yylex (void)
context_type = yylval.tsym.type;
}
- else if (next->token == COLONCOLON && !last_was_coloncolon)
+ else if (next.token == COLONCOLON && !last_was_coloncolon)
last_was_coloncolon = 1;
else
{
@@ -3217,14 +3215,15 @@ yylex (void)
current.value.sval.ptr,
current.value.sval.length);
- VEC_replace (token_and_value, token_fifo, 0, &current);
+ token_fifo[0] = current;
if (checkpoint > 1)
- VEC_block_remove (token_and_value, token_fifo, 1, checkpoint - 1);
+ token_fifo.erase (token_fifo.begin () + 1,
+ token_fifo.begin () + checkpoint);
}
do_pop:
- current = *VEC_index (token_and_value, token_fifo, 0);
- VEC_ordered_remove (token_and_value, token_fifo, 0);
+ current = token_fifo[0];
+ token_fifo.erase (token_fifo.begin ());
yylval = current.value;
return current.token;
}
@@ -3266,7 +3265,7 @@ c_parse (struct parser_state *par_state)
last_was_structop = false;
saw_name_at_eof = 0;
- VEC_free (token_and_value, token_fifo);
+ token_fifo.clear ();
popping = 0;
name_obstack.clear ();
diff --git a/gdb/d-exp.y b/gdb/d-exp.y
index 74e4b63..c09fe7a 100644
--- a/gdb/d-exp.y
+++ b/gdb/d-exp.y
@@ -1313,17 +1313,16 @@ lex_one_token (struct parser_state *par_state)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
-typedef struct
+struct token_and_value
{
int token;
YYSTYPE value;
-} token_and_value;
+};
-DEF_VEC_O (token_and_value);
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
-static VEC (token_and_value) *token_fifo;
+static std::vector<token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@@ -1419,7 +1418,7 @@ yylex (void)
int last_to_examine, next_to_examine, checkpoint;
const struct block *search_block;
- if (popping && !VEC_empty (token_and_value, token_fifo))
+ if (popping && !token_fifo.empty ())
goto do_pop;
popping = 0;
@@ -1431,14 +1430,14 @@ yylex (void)
/* Read any sequence of alternating "." and identifier tokens into
the token FIFO. */
current.value = yylval;
- VEC_safe_push (token_and_value, token_fifo, &current);
+ token_fifo.push_back (current);
last_was_dot = current.token == '.';
while (1)
{
current.token = lex_one_token (pstate);
current.value = yylval;
- VEC_safe_push (token_and_value, token_fifo, &current);
+ token_fifo.push_back (current);
if ((last_was_dot && current.token != IDENTIFIER)
|| (!last_was_dot && current.token != '.'))
@@ -1450,10 +1449,10 @@ yylex (void)
/* We always read one extra token, so compute the number of tokens
to examine accordingly. */
- last_to_examine = VEC_length (token_and_value, token_fifo) - 2;
+ last_to_examine = token_fifo.size () - 2;
next_to_examine = 0;
- current = *VEC_index (token_and_value, token_fifo, next_to_examine);
+ current = token_fifo[next_to_examine];
++next_to_examine;
/* If we are not dealing with a typename, now is the time to find out. */
@@ -1476,17 +1475,17 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
- token_and_value *next;
+ token_and_value next;
- next = VEC_index (token_and_value, token_fifo, next_to_examine);
+ next = token_fifo[next_to_examine];
++next_to_examine;
- if (next->token == IDENTIFIER && last_was_dot)
+ if (next.token == IDENTIFIER && last_was_dot)
{
/* Update the partial name we are constructing. */
obstack_grow_str (&name_obstack, ".");
- obstack_grow (&name_obstack, next->value.sval.ptr,
- next->value.sval.length);
+ obstack_grow (&name_obstack, next.value.sval.ptr,
+ next.value.sval.length);
yylval.sval.ptr = (char *) obstack_base (&name_obstack);
yylval.sval.length = obstack_object_size (&name_obstack);
@@ -1498,13 +1497,13 @@ yylex (void)
if (current.token == TYPENAME)
{
/* Install it as the first token in the FIFO. */
- VEC_replace (token_and_value, token_fifo, 0, &current);
- VEC_block_remove (token_and_value, token_fifo, 1,
- next_to_examine - 1);
+ token_fifo[0] = current;
+ token_fifo.erase (token_fifo.begin () + 1,
+ token_fifo.begin () + next_to_examine);
break;
}
}
- else if (next->token == '.' && !last_was_dot)
+ else if (next.token == '.' && !last_was_dot)
last_was_dot = 1;
else
{
@@ -1515,7 +1514,7 @@ yylex (void)
/* Reset our current token back to the start, if we found nothing
this means that we will just jump to do pop. */
- current = *VEC_index (token_and_value, token_fifo, 0);
+ current = token_fifo[0];
next_to_examine = 1;
}
if (current.token != TYPENAME && current.token != '.')
@@ -1539,16 +1538,16 @@ yylex (void)
while (next_to_examine <= last_to_examine)
{
- token_and_value *next;
+ token_and_value next;
- next = VEC_index (token_and_value, token_fifo, next_to_examine);
+ next = token_fifo[next_to_examine];
++next_to_examine;
- if (next->token == IDENTIFIER && last_was_dot)
+ if (next.token == IDENTIFIER && last_was_dot)
{
int classification;
- yylval = next->value;
+ yylval = next.value;
classification = classify_inner_name (pstate, search_block,
context_type);
/* We keep going until we either run out of names, or until
@@ -1565,8 +1564,8 @@ yylex (void)
/* We don't want to put a leading "." into the name. */
obstack_grow_str (&name_obstack, ".");
}
- obstack_grow (&name_obstack, next->value.sval.ptr,
- next->value.sval.length);
+ obstack_grow (&name_obstack, next.value.sval.ptr,
+ next.value.sval.length);
yylval.sval.ptr = (char *) obstack_base (&name_obstack);
yylval.sval.length = obstack_object_size (&name_obstack);
@@ -1580,7 +1579,7 @@ yylex (void)
context_type = yylval.tsym.type;
}
- else if (next->token == '.' && !last_was_dot)
+ else if (next.token == '.' && !last_was_dot)
last_was_dot = 1;
else
{
@@ -1593,14 +1592,15 @@ yylex (void)
the FIFO, and delete the other constituent tokens. */
if (checkpoint > 0)
{
- VEC_replace (token_and_value, token_fifo, 0, &current);
+ token_fifo[0] = current;
if (checkpoint > 1)
- VEC_block_remove (token_and_value, token_fifo, 1, checkpoint - 1);
+ token_fifo.erase (token_fifo.begin () + 1,
+ token_fifo.begin () + checkpoint);
}
do_pop:
- current = *VEC_index (token_and_value, token_fifo, 0);
- VEC_ordered_remove (token_and_value, token_fifo, 0);
+ current = token_fifo[0];
+ token_fifo.erase (token_fifo.begin ());
yylval = current.value;
return current.token;
}
@@ -1620,7 +1620,7 @@ d_parse (struct parser_state *par_state)
last_was_structop = 0;
saw_name_at_eof = 0;
- VEC_free (token_and_value, token_fifo);
+ token_fifo.clear ();
popping = 0;
name_obstack.clear ();
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
index 47570d5..7521acc 100644
--- a/gdb/go-exp.y
+++ b/gdb/go-exp.y
@@ -1279,17 +1279,15 @@ lex_one_token (struct parser_state *par_state)
}
/* An object of this type is pushed on a FIFO by the "outer" lexer. */
-typedef struct
+struct token_and_value
{
int token;
YYSTYPE value;
-} token_and_value;
-
-DEF_VEC_O (token_and_value);
+};
/* A FIFO of tokens that have been read but not yet returned to the
parser. */
-static VEC (token_and_value) *token_fifo;
+static std::vector<token_and_value> token_fifo;
/* Non-zero if the lexer should return tokens from the FIFO. */
static int popping;
@@ -1485,10 +1483,10 @@ yylex (void)
{
token_and_value current, next;
- if (popping && !VEC_empty (token_and_value, token_fifo))
+ if (popping && !token_fifo.empty ())
{
- token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
- VEC_ordered_remove (token_and_value, token_fifo, 0);
+ token_and_value tv = token_fifo[0];
+ token_fifo.erase (token_fifo.begin ());
yylval = tv.value;
/* There's no need to fall through to handle package.name
as that can never happen here. In theory. */
@@ -1541,13 +1539,11 @@ yylex (void)
}
}
- VEC_safe_push (token_and_value, token_fifo, &next);
- VEC_safe_push (token_and_value, token_fifo, &name2);
+ token_fifo.push_back (next);
+ token_fifo.push_back (name2);
}
else
- {
- VEC_safe_push (token_and_value, token_fifo, &next);
- }
+ token_fifo.push_back (next);
/* If we arrive here we don't have a package-qualified name. */
@@ -1571,7 +1567,7 @@ go_parse (struct parser_state *par_state)
last_was_structop = 0;
saw_name_at_eof = 0;
- VEC_free (token_and_value, token_fifo);
+ token_fifo.clear ();
popping = 0;
name_obstack.clear ();