Merge remote-tracking branch 'origin/maint'

* origin/maint:
  news: prepare for forthcoming release
  doc: explain how mid-rule actions are translated
  error: use better locations for unused midrule values
  doc: various minor improvements and fixes
  tests: ignore more useless compiler warnings
  tests: be robust to C being compiled with a C++11 compiler
  build: beware of Clang++ not supporting POSIXLY_CORRECT
  maint: post-release administrivia
  version 2.6.90
  build: fix syntax-check error.
  cpp: simplify the Flex version checking macro
  news: improve the carets example and fix a typo
  cpp: improve the Flex version checking macro
  carets: improve the code
  maint: update news
  build: keep -Wmissing-declarations and -Wmissing-prototypes for modern GCCs
  build: drop -Wcast-qual
  gnulib: update

Conflicts:
	NEWS
	doc/Makefile.am
	doc/bison.texi
	gnulib
	src/reader.c
	tests/actions.at
	tests/atlocal.in
	tests/input.at
This commit is contained in:
Theophile Ranquet
2012-12-10 17:01:55 +01:00
18 changed files with 611 additions and 278 deletions

View File

@@ -21,18 +21,12 @@
# error "FLEX_PREFIX not defined"
#endif
/* Whether this version of Flex is (strictly) greater than
Major.Minor.Subminor. */
#ifdef YY_FLEX_SUBMINOR_VERSION
# define FLEX_VERSION \
(YY_FLEX_MAJOR_VERSION) * 1000000 \
+ (YY_FLEX_MINOR_VERSION) * 1000 \
+ (YY_FLEX_SUBMINOR_VERSION)
#else
# define FLEX_VERSION \
(YY_FLEX_MAJOR_VERSION) * 1000000 \
+ (YY_FLEX_MINOR_VERSION) * 1000
#endif
/* Flex full version as a number. */
#define FLEX_VERSION \
((YY_FLEX_MAJOR_VERSION) * 1000000 \
+ (YY_FLEX_MINOR_VERSION) * 1000 \
+ (YY_FLEX_SUBMINOR_VERSION))
/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used. */
# if FLEX_VERSION <= 2005031
int FLEX_PREFIX (get_lineno) (void);

View File

@@ -143,15 +143,13 @@ location_print (FILE *out, location loc)
same file all over for each error. */
struct caret_info
{
FILE* source;
FILE *source;
size_t line;
size_t offset;
};
static struct caret_info caret_info = { NULL, 1, 0 };
/* Free any allocated ressources and close any open file handles that are
left-over by the usage of location_caret. */
void
cleanup_caret ()
{
@@ -159,11 +157,10 @@ cleanup_caret ()
fclose (caret_info.source);
}
/* Output to OUT the line and caret corresponding to location LOC. */
void
location_caret (FILE *out, location loc)
{
/* FIXME: find a way to support X-file locations, and only open once each
/* FIXME: find a way to support multifile locations, and only open once each
file. That would make the procedure future-proof. */
if (! (caret_info.source
|| (caret_info.source = fopen (loc.start.file, "r")))
@@ -183,41 +180,36 @@ location_caret (FILE *out, location loc)
}
/* Advance to the line's position, keeping track of the offset. */
{
int i;
for (i = caret_info.line; i < loc.start.line; caret_info.offset++)
if (fgetc (caret_info.source) == '\n')
++i;
}
caret_info.line = loc.start.line;
while (caret_info.line < loc.start.line)
caret_info.line += fgetc (caret_info.source) == '\n';
caret_info.offset = ftell (caret_info.source);
/* Read the actual line. Don't update the offset, so that we keep a pointer
to the start of the line. */
{
ssize_t len = 0;
char *buf = NULL;
if ((len = getline (&buf, (size_t*) &len, caret_info.source)) != -1)
size_t size = 0;
ssize_t len = getline (&buf, &size, caret_info.source);
if (0 < len)
{
/* The caret of a multiline location ends with the first line. */
int end = loc.start.line != loc.end.line ? len : loc.end.column;
if (len)
{
int i = loc.start.column;
/* Quote the file, indent by a single column. */
fputc (' ', out);
fwrite (buf, 1, len, out);
/* Quote the file, indent by a single column. */
fputc (' ', out);
fwrite (buf, 1, len, out);
/* Print the caret, with the same indent as above. */
fputc (' ', out);
fprintf (out, "%*s", loc.start.column - 1, "");
do {
fputc ('^', out);
} while (++i < end);
}
/* Print the caret, with the same indent as above. */
fprintf (out, " %*s", loc.start.column - 1, "");
{
int i = loc.start.column;
do
fputc ('^', out);
while (++i < end);
}
fputc ('\n', out);
free (buf);
}
free (buf);
}
}

View File

@@ -326,9 +326,9 @@ grammar_rule_check (const symbol_list *r)
{
warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
if (n)
complain (&r->location, warn_flag, _("unused value: $%d"), n);
complain (&l->location, warn_flag, _("unused value: $%d"), n);
else
complain (&r->location, warn_flag, _("unset value: $$"));
complain (&l->location, warn_flag, _("unset value: $$"));
}
}
}