diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2020-03-21 09:21:38 +0100 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2020-03-28 15:13:27 +0100 |
commit | 00b0d02955e787e639f68d77550d578a427eee2d (patch) | |
tree | 9d86722a135533a70065280f7ea11e52a3d516f1 /tests | |
parent | 1045c8d0efe8d8549c67842b08ab6b3d3685838d (diff) | |
download | bison-00b0d02955e787e639f68d77550d578a427eee2d.tar.gz |
tests: yacc.c: avoid yysyntax_error_arguments
Because glr.c shares the same testing routines, we also need to
convert it.
* data/skeletons/glr.c (yyparse_context_token): New.
* tests/local.at (yyreport_syntax_error): here.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/local.at | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/tests/local.at b/tests/local.at index 25f08462..42de48c6 100644 --- a/tests/local.at +++ b/tests/local.at @@ -624,31 +624,36 @@ location_print (FILE *yyo, ]AT_YYLTYPE[ const * const yylocp) int yyreport_syntax_error (const yyparse_context_t *ctx]AT_PARAM_IF([, AT_PARSE_PARAMS])[) { - /* Arguments of yyformat: reported tokens (one for the "unexpected", - one per "expected"). */ - int arg[YYNTOKENS]; - int n = yysyntax_error_arguments (ctx, arg, YYNTOKENS);]AT_PARAM_IF([m4_bpatsubst(m4_defn([AT_PARSE_PARAMS]), + int res = 0;]AT_PARAM_IF([m4_bpatsubst(m4_defn([AT_PARSE_PARAMS]), [[^,]+[^A-Za-z_0-9]\([A-Za-z_][A-Za-z_0-9]*\),* *], [ YYUSE (\1);])])[]m4_bmatch(m4_defn([AT_PARSE_PARAMS]), [nerrs],[[ ++global_nerrs; - ++*nerrs;]])[ - if (n < 0) - return n; - if (n) - {]AT_LOCATION_IF([[ - LOCATION_PRINT (stderr, *yyparse_context_location (ctx)); - fprintf (stderr, ": ");]])[ - fprintf (stderr, "syntax error on token [%s]", yysymbol_name (arg[0])); - if (1 < n) + ++*nerrs;]])[]AT_LOCATION_IF([[ + LOCATION_PRINT (stderr, *yyparse_context_location (ctx)); + fprintf (stderr, ": ");]])[ + fprintf (stderr, "syntax error"); + { + int la = yyparse_context_token (ctx); + if (la != YYEMPTY) + fprintf (stderr, " on token [%s]", yysymbol_name (la)); + } + { + enum { TOKENMAX = 10 }; + int expected[TOKENMAX]; + int n = yyexpected_tokens (ctx, expected, TOKENMAX); + /* Forward errors to yyparse. */ + if (n < 0) + res = n; + else if (0 < n) { fprintf (stderr, " (expected:"); - for (int i = 1; i < n; ++i) - fprintf (stderr, " [%s]", yysymbol_name (arg[i])); + for (int i = 0; i < n; ++i) + fprintf (stderr, " [%s]", yysymbol_name (expected[i])); fprintf (stderr, ")"); } - fprintf (stderr, "\n"); } - return 0; + fprintf (stderr, "\n"); + return res; } ]])[ |