aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-06-01 23:02:37 -0600
committerTom Tromey <tom@tromey.com>2018-06-18 12:29:15 -0600
commit69d340c68449f238fe665abf4a3a7989cd2d8376 (patch)
tree7f2a8b1808d62b69775b5fa095e5e8e6382a22dd
parentdb67d458959d211835f78d8f2aebb5ae84eb42e7 (diff)
downloadbinutils-69d340c68449f238fe665abf4a3a7989cd2d8376.zip
binutils-69d340c68449f238fe665abf4a3a7989cd2d8376.tar.gz
binutils-69d340c68449f238fe665abf4a3a7989cd2d8376.tar.bz2
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 <tom@tromey.com> * 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) <la_error>: 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.
-rw-r--r--gdb/ChangeLog34
-rw-r--r--gdb/ada-exp.y4
-rw-r--r--gdb/ada-lang.c1
-rw-r--r--gdb/ada-lang.h2
-rw-r--r--gdb/c-exp.y6
-rw-r--r--gdb/c-lang.c4
-rw-r--r--gdb/c-lang.h2
-rw-r--r--gdb/d-exp.y6
-rw-r--r--gdb/d-lang.c1
-rw-r--r--gdb/d-lang.h2
-rw-r--r--gdb/f-exp.y6
-rw-r--r--gdb/f-lang.c1
-rw-r--r--gdb/f-lang.h2
-rw-r--r--gdb/go-exp.y6
-rw-r--r--gdb/go-lang.c1
-rw-r--r--gdb/go-lang.h2
-rw-r--r--gdb/language.c10
-rw-r--r--gdb/language.h4
-rw-r--r--gdb/m2-exp.y6
-rw-r--r--gdb/m2-lang.c1
-rw-r--r--gdb/m2-lang.h2
-rw-r--r--gdb/objc-lang.c1
-rw-r--r--gdb/opencl-lang.c1
-rw-r--r--gdb/p-exp.y6
-rw-r--r--gdb/p-lang.c1
-rw-r--r--gdb/p-lang.h2
-rw-r--r--gdb/parse.c3
-rw-r--r--gdb/rust-exp.y5
-rw-r--r--gdb/rust-lang.c1
-rw-r--r--gdb/rust-lang.h3
30 files changed, 58 insertions, 68 deletions
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 <tom@tromey.com>
+
+ * 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) <la_error>: 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 <alan.hayward@arm.com>
* 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 <algorithm>
-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<set_field> 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);