X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/92f39ba6dc740ac1f9597e256014ae8740b0477d..957255b82cdbf46a5f74d33862ad7edf7d0fa218:/src/scan-skel.l diff --git a/src/scan-skel.l b/src/scan-skel.l index de85b4e0..129b8899 100644 --- a/src/scan-skel.l +++ b/src/scan-skel.l @@ -1,6 +1,6 @@ /* Scan Bison Skeletons. -*- C -*- - Copyright (C) 2001-2012 Free Software Foundation, Inc. + Copyright (C) 2001-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -72,21 +72,20 @@ static void fail_for_invalid_at (char const *at); "@@" fputc ('@', yyout); "@{" fputc ('[', yyout); "@}" fputc (']', yyout); -"@`" continue; /* Used by b4_cat in ../data/bison.m4. */ +"@'" continue; /* Used by b4_cat in ../data/bison.m4. */ @\n continue; "@oline@" fprintf (yyout, "%d", out_lineno + 1); "@ofile@" fputs (quotearg_style (c_quoting_style, out_name), yyout); -@basename"(" at_init (&argc, argv, &at_ptr, &at_basename); -@complain"(" at_init (&argc, argv, &at_ptr, &at_complain); -@output"(" at_init (&argc, argv, &at_ptr, &at_output); -@[a-z_]+"(" at_init (&argc, argv, &at_ptr, NULL); +"@basename(" at_init (&argc, argv, &at_ptr, &at_basename); +"@complain(" at_init (&argc, argv, &at_ptr, &at_complain); +"@output(" at_init (&argc, argv, &at_ptr, &at_output); /* This pattern must not match more than the previous @ patterns. */ -@[^@{}`(\n]* fail_for_invalid_at (yytext); -\n out_lineno++; ECHO; -[^@\n]+ ECHO; +@[^@{}\'(\n]* fail_for_invalid_at (yytext); +\n out_lineno++; ECHO; +[^@\n]+ ECHO; <> { if (out_name) @@ -104,7 +103,7 @@ static void fail_for_invalid_at (char const *at); "@@" obstack_1grow (&obstack_for_string, '@'); "@{" obstack_1grow (&obstack_for_string, '['); "@}" obstack_1grow (&obstack_for_string, ']'); - "@`" continue; /* For starting an argument that begins with whitespace. */ + "@'" continue; /* For starting an argument that begins with whitespace. */ @\n continue; @[,)] { @@ -118,11 +117,8 @@ static void fail_for_invalid_at (char const *at); BEGIN SC_AT_DIRECTIVE_SKIP_WS; else { - if (at_ptr) - at_ptr (argc, argv, &out_name, &out_lineno); - else - fail_for_invalid_at (argv[0]); - + aver (at_ptr); + at_ptr (argc, argv, &out_name, &out_lineno); obstack_free (&obstack_for_string, argv[0]); argc = 0; BEGIN INITIAL; @@ -187,10 +183,12 @@ flag (const char *arg) /* compare with values issued from b4_error */ if (STREQ (arg, "complain")) return complaint; + else if (STREQ (arg, "deprecated")) + return Wdeprecated; else if (STREQ (arg, "fatal")) return fatal; else if (STREQ (arg, "note")) - return silent; + return silent | complaint | no_caret; else if (STREQ (arg, "warn")) return Wother; else @@ -230,7 +228,7 @@ at_complain (int argc, char *argv[], char **out_namep, int *out_linenop) indent += SUB_INDENT; else indent = 0; - complain_args (locp, w, &indent, argc - 3, argv + 3); + complain_args (locp, w, &indent, argc - 4, argv + 4); if (w & silent) indent -= SUB_INDENT; } @@ -246,12 +244,13 @@ at_output (int argc, char *argv[], char **out_namep, int *out_linenop) xfclose (yyout); } *out_namep = xstrdup (argv[1]); - output_file_name_check (out_namep); - yyout = xfopen (*out_namep, "w"); + output_file_name_check (out_namep, true); + /* If there were errors, do not generate the output. */ + yyout = xfopen (complaint_status ? "/dev/null" : *out_namep, "w"); *out_linenop = 1; } - static void +static void fail_for_at_directive_too_few_args (char const *at_directive_name) { complain (NULL, fatal, _("too few arguments for %s directive in skeleton"),