From 8621b685bfdcb8773b8177fb2b89e45499902868 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 24 Mar 2019 18:07:00 -0600 Subject: [PATCH] Move comma_terminates global to parser_state This moves the comma_terminates global to parser_state. gdb/ChangeLog 2019-04-04 Tom Tromey * rust-exp.y (rustyylex, rust_lex_tests): Update. * parser-defs.h (struct parser_state) : Add new parameter. : 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(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3e03604528..8217a76325 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2019-04-04 Tom Tromey + + * rust-exp.y (rustyylex, rust_lex_tests): Update. + * parser-defs.h (struct parser_state) : Add new + parameter. + : 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 * rust-exp.y (struct rust_parser) : New member. diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l index 6163405545..43bd25c1e2 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 cb9e9e002c..16b291f9c7 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 c151995352..06e12e3201 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 100a3bbec1..522751d226 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 aaffe3d45a..ea1487cb00 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 c0f5e75be2..2174014e79 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 768f302592..65874c6327 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 4ac79faaea..617ff70d67 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 6fb0f8e553..f2bb18fd9c 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 9d3083ead9..2f2cc8f31f 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);