From 69d340c68449f238fe665abf4a3a7989cd2d8376 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 1 Jun 2018 23:02:37 -0600 Subject: Remove la_error While working on the parser code, I noticed that yyerror is exported from each parser. It is used by this code in parse.c: TRY { if (lang->la_parser (&ps)) lang->la_error (NULL); } However, it seems to me that la_error will never be called here, because in every case, la_parser throws an exception on error -- each implementation of yyerror just calls error. So, this patch removes la_error and makes all the yyerror functions static. This is handy primarily because it makes it simpler to make the expression parsers pure. Tested by the buildbot. gdb/ChangeLog 2018-06-18 Tom Tromey * rust-lang.h (rust_yyerror): Don't declare. * rust-lang.c (rust_language_defn): Update. * rust-exp.y (yyerror): Now static. * parse.c (parse_exp_in_context_1): Update. * p-lang.h (p_yyerror): Don't declare. * p-lang.c (p_language_defn): Update. * p-exp.y (yyerror): Now static. * opencl-lang.c (opencl_language_defn): Update. * objc-lang.c (objc_language_defn): Update. * m2-lang.h (m2_yyerror): Don't declare. * m2-lang.c (m2_language_defn): Update. * m2-exp.y (yyerror): Now static. * language.h (struct language_defn) : Remove. * language.c (unk_lang_error): Remove. (unknown_language_defn, auto_language_defn): Remove. * go-lang.h (go_yyerror): Don't declare. * go-lang.c (go_language_defn): Update. * go-exp.y (yyerror): Now static. * f-lang.h (f_yyerror): Don't declare. * f-lang.c (f_language_defn): Update. * f-exp.y (yyerror): Now static. * d-lang.h (d_yyerror): Don't declare. * d-lang.c (d_language_defn): Update. * d-exp.y (yyerror): Now static. * c-lang.h (c_yyerror): Don't declare. * c-lang.c (c_language_defn, cplus_language_defn) (asm_language_defn, minimal_language_defn): Update. * c-exp.y (yyerror): Now static. * ada-lang.h (ada_yyerror): Don't declare. * ada-lang.c (ada_language_defn): Update. * ada-exp.y (yyerror): Now static. --- gdb/ChangeLog | 34 ++++++++++++++++++++++++++++++++++ gdb/ada-exp.y | 4 ++-- gdb/ada-lang.c | 1 - gdb/ada-lang.h | 2 -- gdb/c-exp.y | 6 +++--- gdb/c-lang.c | 4 ---- gdb/c-lang.h | 2 -- gdb/d-exp.y | 6 +++--- gdb/d-lang.c | 1 - gdb/d-lang.h | 2 -- gdb/f-exp.y | 6 +++--- gdb/f-lang.c | 1 - gdb/f-lang.h | 2 -- gdb/go-exp.y | 6 +++--- gdb/go-lang.c | 1 - gdb/go-lang.h | 2 -- gdb/language.c | 10 ---------- gdb/language.h | 4 ---- gdb/m2-exp.y | 6 +++--- gdb/m2-lang.c | 1 - gdb/m2-lang.h | 2 -- gdb/objc-lang.c | 1 - gdb/opencl-lang.c | 1 - gdb/p-exp.y | 6 +++--- gdb/p-lang.c | 1 - gdb/p-lang.h | 2 -- gdb/parse.c | 3 +-- gdb/rust-exp.y | 5 +++-- gdb/rust-lang.c | 1 - gdb/rust-lang.h | 3 --- 30 files changed, 58 insertions(+), 68 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4217b08..f80eda0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,37 @@ +2018-06-18 Tom Tromey + + * rust-lang.h (rust_yyerror): Don't declare. + * rust-lang.c (rust_language_defn): Update. + * rust-exp.y (yyerror): Now static. + * parse.c (parse_exp_in_context_1): Update. + * p-lang.h (p_yyerror): Don't declare. + * p-lang.c (p_language_defn): Update. + * p-exp.y (yyerror): Now static. + * opencl-lang.c (opencl_language_defn): Update. + * objc-lang.c (objc_language_defn): Update. + * m2-lang.h (m2_yyerror): Don't declare. + * m2-lang.c (m2_language_defn): Update. + * m2-exp.y (yyerror): Now static. + * language.h (struct language_defn) : Remove. + * language.c (unk_lang_error): Remove. + (unknown_language_defn, auto_language_defn): Remove. + * go-lang.h (go_yyerror): Don't declare. + * go-lang.c (go_language_defn): Update. + * go-exp.y (yyerror): Now static. + * f-lang.h (f_yyerror): Don't declare. + * f-lang.c (f_language_defn): Update. + * f-exp.y (yyerror): Now static. + * d-lang.h (d_yyerror): Don't declare. + * d-lang.c (d_language_defn): Update. + * d-exp.y (yyerror): Now static. + * c-lang.h (c_yyerror): Don't declare. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Update. + * c-exp.y (yyerror): Now static. + * ada-lang.h (ada_yyerror): Don't declare. + * ada-lang.c (ada_language_defn): Update. + * ada-exp.y (yyerror): Now static. + 2018-06-18 Alan Hayward * aarch64-linux-nat.c (fetch_sveregs_from_thread): New function. diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index 864f9bc..6dc4865 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -77,7 +77,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static void write_int (struct parser_state *, LONGEST, struct type *); @@ -742,7 +742,7 @@ ada_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { error (_("Error in expression, near `%s'."), lexptr); diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index b34efa9..298adf7 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -14360,7 +14360,6 @@ extern const struct language_defn ada_language_defn = { ada_extensions, &ada_exp_descriptor, parse, - ada_yyerror, resolve, ada_printchar, /* Print a character constant */ ada_printstr, /* Function to print string constant */ diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 8e7bd50..9dcc5de 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -166,8 +166,6 @@ extern int ada_get_field_index (const struct type *type, extern int ada_parse (struct parser_state *); /* Defined in ada-exp.y */ -extern void ada_yyerror (const char *); /* Defined in ada-exp.y */ - /* Defined in ada-typeprint.c */ extern void ada_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); diff --git a/gdb/c-exp.y b/gdb/c-exp.y index ae31af5..a9ccbdc 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -70,7 +70,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static int type_aggregate_p (struct type *); @@ -3334,11 +3334,11 @@ c_print_token (FILE *file, int type, YYSTYPE value) #endif -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 6bbb470..1c283a8 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -843,7 +843,6 @@ extern const struct language_defn c_language_defn = c_extensions, &exp_descriptor_c, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ @@ -989,7 +988,6 @@ extern const struct language_defn cplus_language_defn = cplus_extensions, &exp_descriptor_c, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ @@ -1044,7 +1042,6 @@ extern const struct language_defn asm_language_defn = asm_extensions, &exp_descriptor_c, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ @@ -1099,7 +1096,6 @@ extern const struct language_defn minimal_language_defn = NULL, &exp_descriptor_c, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ diff --git a/gdb/c-lang.h b/gdb/c-lang.h index a250fb3..e961826 100644 --- a/gdb/c-lang.h +++ b/gdb/c-lang.h @@ -63,8 +63,6 @@ DEF_ENUM_FLAGS_TYPE (enum c_string_type_values, c_string_type); extern int c_parse (struct parser_state *); -extern void c_yyerror (const char *); - extern int c_parse_escape (const char **, struct obstack *); /* Defined in c-typeprint.c */ diff --git a/gdb/d-exp.y b/gdb/d-exp.y index 508927b..74e4b63 100644 --- a/gdb/d-exp.y +++ b/gdb/d-exp.y @@ -69,7 +69,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static int type_aggregate_p (struct type *); @@ -1627,12 +1627,12 @@ d_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 688ae98..fe792d8 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -216,7 +216,6 @@ extern const struct language_defn d_language_defn = d_extensions, &exp_descriptor_c, d_parse, - d_yyerror, null_post_parser, c_printchar, /* Print a character constant. */ c_printstr, /* Function to print string constant. */ diff --git a/gdb/d-lang.h b/gdb/d-lang.h index 391ea86..e31c762 100644 --- a/gdb/d-lang.h +++ b/gdb/d-lang.h @@ -58,8 +58,6 @@ struct builtin_d_type extern int d_parse (struct parser_state *); -extern void d_yyerror (const char *); - /* Defined in d-lang.c */ extern const char *d_main_name (void); diff --git a/gdb/f-exp.y b/gdb/f-exp.y index e39f684..5ef1612 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -72,7 +72,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static void growbuf_by_size (int); @@ -1216,11 +1216,11 @@ f_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 81922f7..1b7994f 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -257,7 +257,6 @@ extern const struct language_defn f_language_defn = f_extensions, &exp_descriptor_standard, f_parse, /* parser */ - f_yyerror, /* parser error function */ null_post_parser, f_printchar, /* Print character constant */ f_printstr, /* function to print string constant */ diff --git a/gdb/f-lang.h b/gdb/f-lang.h index e9d0f3a..d60cf1b 100644 --- a/gdb/f-lang.h +++ b/gdb/f-lang.h @@ -25,8 +25,6 @@ struct parser_state; extern int f_parse (struct parser_state *); -extern void f_yyerror (const char *); /* Defined in f-exp.y */ - extern void f_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); diff --git a/gdb/go-exp.y b/gdb/go-exp.y index 936d507..47570d5 100644 --- a/gdb/go-exp.y +++ b/gdb/go-exp.y @@ -81,7 +81,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); %} @@ -1578,11 +1578,11 @@ go_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 60ab2f3..49a6b9e 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -577,7 +577,6 @@ extern const struct language_defn go_language_defn = NULL, &exp_descriptor_c, go_parse, - go_yyerror, null_post_parser, c_printchar, /* Print a character constant. */ c_printstr, /* Function to print string constant. */ diff --git a/gdb/go-lang.h b/gdb/go-lang.h index 84af938..963ee2f 100644 --- a/gdb/go-lang.h +++ b/gdb/go-lang.h @@ -60,8 +60,6 @@ enum go_type extern int go_parse (struct parser_state *); -extern void go_yyerror (const char *); - /* Defined in go-lang.c. */ extern const char *go_main_name (void); diff --git a/gdb/language.c b/gdb/language.c index 22199e0..44bbeb4 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -46,8 +46,6 @@ #include "c-lang.h" #include -static void unk_lang_error (const char *); - static int unk_lang_parser (struct parser_state *); static void set_range_case (void); @@ -751,12 +749,6 @@ unk_lang_parser (struct parser_state *ps) } static void -unk_lang_error (const char *msg) -{ - error (_("Attempted to parse an expression with unknown language")); -} - -static void unk_lang_emit_char (int c, struct type *type, struct ui_file *stream, int quoter) { @@ -852,7 +844,6 @@ const struct language_defn unknown_language_defn = NULL, &exp_descriptor_standard, unk_lang_parser, - unk_lang_error, null_post_parser, unk_lang_printchar, /* Print character constant */ unk_lang_printstr, @@ -904,7 +895,6 @@ const struct language_defn auto_language_defn = NULL, &exp_descriptor_standard, unk_lang_parser, - unk_lang_error, null_post_parser, unk_lang_printchar, /* Print character constant */ unk_lang_printstr, diff --git a/gdb/language.h b/gdb/language.h index 029de4a..e103a93 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -172,10 +172,6 @@ struct language_defn int (*la_parser) (struct parser_state *); - /* Parser error function. */ - - void (*la_error) (const char *); - /* Given an expression *EXPP created by prefixifying the result of la_parser, perform any remaining processing necessary to complete its translation. *EXPP may change; la_post_parser is responsible diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index 2cf026c..2cf2bb5 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -65,7 +65,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static int parse_number (int); @@ -1038,11 +1038,11 @@ m2_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 6e6434b..d849f8c 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -365,7 +365,6 @@ extern const struct language_defn m2_language_defn = NULL, &exp_descriptor_modula2, m2_parse, /* parser */ - m2_yyerror, /* parser error function */ null_post_parser, m2_printchar, /* Print character constant */ m2_printstr, /* function to print string constant */ diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h index d7e1aec..467b984 100644 --- a/gdb/m2-lang.h +++ b/gdb/m2-lang.h @@ -22,8 +22,6 @@ struct parser_state; extern int m2_parse (struct parser_state *); /* Defined in m2-exp.y */ -extern void m2_yyerror (const char *); /* Defined in m2-exp.y */ - /* Defined in m2-typeprint.c */ extern void m2_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index f8b28b2..6da8af1 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -376,7 +376,6 @@ extern const struct language_defn objc_language_defn = { objc_extensions, &exp_descriptor_standard, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 8af63f7..6bfdbde 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1053,7 +1053,6 @@ extern const struct language_defn opencl_language_defn = NULL, &exp_descriptor_opencl, c_parse, - c_yyerror, null_post_parser, c_printchar, /* Print a character constant */ c_printstr, /* Function to print string constant */ diff --git a/gdb/p-exp.y b/gdb/p-exp.y index d527b77..9ffaccd 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -72,7 +72,7 @@ int yyparse (void); static int yylex (void); -void yyerror (const char *); +static void yyerror (const char *); static char *uptok (const char *, int); %} @@ -1722,11 +1722,11 @@ pascal_parse (struct parser_state *par_state) return yyparse (); } -void +static void yyerror (const char *msg) { if (prev_lexptr) lexptr = prev_lexptr; - error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr); + error (_("A %s in expression, near `%s'."), msg, lexptr); } diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 3ff7f56..56dfa19 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -427,7 +427,6 @@ extern const struct language_defn pascal_language_defn = p_extensions, &exp_descriptor_standard, pascal_parse, - pascal_yyerror, null_post_parser, pascal_printchar, /* Print a character constant */ pascal_printstr, /* Function to print string constant */ diff --git a/gdb/p-lang.h b/gdb/p-lang.h index 61ee752..a3313c2 100644 --- a/gdb/p-lang.h +++ b/gdb/p-lang.h @@ -27,8 +27,6 @@ extern const char *pascal_main_name (void); extern int pascal_parse (struct parser_state *); /* Defined in p-exp.y */ -extern void pascal_yyerror (const char *); /* Defined in p-exp.y */ - /* Defined in p-typeprint.c */ extern void pascal_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); diff --git a/gdb/parse.c b/gdb/parse.c index 193abe8..acb08f2 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -1202,8 +1202,7 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, TRY { - if (lang->la_parser (&ps)) - lang->la_error (NULL); + lang->la_parser (&ps); } CATCH (except, RETURN_MASK_ALL) { diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y index 9f21498..b609976 100644 --- a/gdb/rust-exp.y +++ b/gdb/rust-exp.y @@ -70,6 +70,7 @@ struct set_field typedef std::vector rust_set_vector; static int rustyylex (void); +static void rustyyerror (const char *msg); static void rust_push_back (char c); static const char *rust_copy_name (const char *, int); static struct stoken rust_concat3 (const char *, const char *, const char *); @@ -2538,11 +2539,11 @@ rust_parse (struct parser_state *state) /* The parser error handler. */ -void +static void rustyyerror (const char *msg) { const char *where = prev_lexptr ? prev_lexptr : lexptr; - error (_("%s in expression, near `%s'."), (msg ? msg : "Error"), where); + error (_("%s in expression, near `%s'."), msg, where); } diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 167f353..d9807d0 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -2013,7 +2013,6 @@ extern const struct language_defn rust_language_defn = rust_extensions, &exp_descriptor_rust, rust_parse, - rustyyerror, null_post_parser, rust_printchar, /* Print a character constant */ rust_printstr, /* Function to print string constant */ diff --git a/gdb/rust-lang.h b/gdb/rust-lang.h index ce30e33..f81f47f 100644 --- a/gdb/rust-lang.h +++ b/gdb/rust-lang.h @@ -26,9 +26,6 @@ struct type; /* The la_parser implementation for Rust. */ extern int rust_parse (struct parser_state *); -/* The la_error implementation for Rust. */ -extern void rustyyerror (const char *); - /* Return true if TYPE is a tuple type; otherwise false. */ extern bool rust_tuple_type_p (struct type *type); -- cgit v1.1