Move comma_terminates global to parser_state

This moves the comma_terminates global to parser_state.

gdb/ChangeLog
2019-04-04  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.
This commit is contained in:
Tom Tromey 2019-03-24 18:07:00 -06:00
parent 28aaf3fdf9
commit 8621b685bf
11 changed files with 36 additions and 19 deletions

View File

@ -1,3 +1,20 @@
2019-04-04 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.
2019-04-04 Tom Tromey <tom@tromey.com>
* rust-exp.y (struct rust_parser) <paren_depth>: New member.

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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++;

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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. */

View File

@ -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);