Fix strange %define locations for default values.

Reported by Akim Demaille at
<http://lists.gnu.org/archive/html/bug-bison/2007-12/msg00001.html>
and discussed again starting at
<http://lists.gnu.org/archive/html/bison-patches/2008-11/msg00102.html>.
* data/bison.m4 (b4_percent_define_default): Leave syncline blank
because location information is bogus.
Use angle brackets to delimit fake file name because square brackets
look like over-quoted m4.  Choose a better fake file name.
Use negative line numbers.
* src/muscle_tab.c (muscle_percent_define_default): Likewise.
* src/location.c (location_print): If line for a boundary is negative,
only print that boundary's file name.
* src/location.h: Document that.
* tests/skeletons.at (%define Boolean variables: invalid skeleton
defaults): Update output.
This commit is contained in:
Joel E. Denny
2009-04-03 03:13:36 -04:00
parent e021191bcf
commit 92822affc5
6 changed files with 68 additions and 30 deletions

View File

@@ -1,3 +1,22 @@
2009-04-03 Joel E. Denny <jdenny@ces.clemson.edu>
Fix strange %define locations for default values.
Reported by Akim Demaille at
<http://lists.gnu.org/archive/html/bug-bison/2007-12/msg00001.html>
and discussed again starting at
<http://lists.gnu.org/archive/html/bison-patches/2008-11/msg00102.html>.
* data/bison.m4 (b4_percent_define_default): Leave syncline blank
because location information is bogus.
Use angle brackets to delimit fake file name because square brackets
look like underexpanded m4. Choose a better fake file name.
Use negative line numbers.
* src/muscle_tab.c (muscle_percent_define_default): Likewise.
* src/location.c (location_print): If line for a boundary is negative,
only print that boundary's file name.
* src/location.h: Document that.
* tests/skeletons.at (%define Boolean variables: invalid skeleton
defaults): Update output.
2009-04-03 Joel E. Denny <jdenny@ces.clemson.edu>
Pacify ./configure --enable-gcc-warnings.

View File

@@ -680,10 +680,9 @@ m4_define([b4_percent_define_default],
[m4_ifndef([b4_percent_define(]$1[)],
[m4_define([b4_percent_define(]$1[)], [$2])dnl
m4_define([b4_percent_define_loc(]$1[)],
[[[[[Bison:b4_percent_define_default]:1.0]], [[[Bison:b4_percent_define_default]:1.0]]]])dnl
m4_define([b4_percent_define_syncline(]$1[)],
[[]b4_syncline(1, [["[Bison:b4_percent_define_default]"]])[
]])])])
[[[[<skeleton default value>:-1.-1]],
[[<skeleton default value>:-1.-1]]]])dnl
m4_define([b4_percent_define_syncline(]$1[)], [[]])])])
# b4_percent_define_check_values(VALUES)
# --------------------------------------

View File

@@ -1,5 +1,6 @@
/* Locations for Bison
Copyright (C) 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -100,21 +101,37 @@ location_compute (location *loc, boundary *cur, char const *token, size_t size)
void
location_print (FILE *out, location loc)
{
int end_col = 0 < loc.end.column ? loc.end.column - 1 : 0;
fprintf (out, "%s:%d",
quotearg_n_style (3, escape_quoting_style, loc.start.file),
loc.start.line);
if (0 <= loc.start.column)
fprintf (out, ".%d", loc.start.column);
int end_col = 0 != loc.end.column ? loc.end.column - 1 : 0;
fprintf (out, "%s",
quotearg_n_style (3, escape_quoting_style, loc.start.file));
if (0 <= loc.start.line)
{
fprintf(out, ":%d", loc.start.line);
if (0 <= loc.start.column)
fprintf (out, ".%d", loc.start.column);
}
if (loc.start.file != loc.end.file)
fprintf (out, "-%s:%d.%d",
quotearg_n_style (3, escape_quoting_style, loc.end.file),
loc.end.line, end_col);
else if (loc.start.line < loc.end.line)
fprintf (out, "-%d.%d", loc.end.line, end_col);
else if (0 <= loc.start.column && loc.start.column < end_col)
fprintf (out, "-%d", end_col);
{
fprintf (out, "-%s",
quotearg_n_style (3, escape_quoting_style, loc.end.file));
if (0 <= loc.end.line)
{
fprintf(out, ":%d", loc.end.line);
if (0 <= end_col)
fprintf (out, ".%d", end_col);
}
}
else if (0 <= loc.end.line)
{
if (loc.start.line < loc.end.line)
{
fprintf (out, "-%d", loc.end.line);
if (0 <= end_col)
fprintf (out, ".%d", end_col);
}
else if (0 <= end_col && loc.start.column < end_col)
fprintf (out, "-%d", end_col);
}
}
void

View File

@@ -1,5 +1,6 @@
/* Locations for Bison
Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -27,8 +28,11 @@ typedef struct
/* The name of the file that contains the boundary. */
uniqstr file;
/* The (origin-1) line that contains the boundary.
If this is INT_MAX, the line number has overflowed. */
/* If nonnegative, the (origin-1) line that contains the boundary.
If this is INT_MAX, the line number has overflowed.
Meaningless and not displayed if negative.
*/
int line;
/* If nonnegative, the (origin-1) column just after the boundary.

View File

@@ -1,7 +1,7 @@
/* Muscle table manager for Bison.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
Foundation, Inc.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -539,13 +539,12 @@ muscle_percent_define_default (char const *variable, char const *value)
{
location loc;
MUSCLE_INSERT_STRING (name, value);
loc.start.file = loc.end.file = "[Bison:muscle_percent_define_default]";
loc.start.line = loc.end.line = 1;
loc.start.column = loc.end.column = 0;
loc.start.file = loc.end.file = "<default value>";
loc.start.line = loc.end.line = -1;
loc.start.column = loc.end.column = -1;
muscle_insert (loc_name, "");
muscle_location_grow (loc_name, loc);
muscle_insert (syncline_name, "");
muscle_syncline_grow (syncline_name, loc);
}
}

View File

@@ -1,5 +1,5 @@
# Checking skeleton support. -*- Autotest -*-
# Copyright (C) 2007 Free Software Foundation, Inc.
# Copyright (C) 2007, 2009 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -159,7 +159,7 @@ start: ;
]])
AT_BISON_CHECK([[input.y]], [[1]], [[]],
[[[Bison:b4_percent_define_default]:1.0: invalid value for %define Boolean variable `foo'
[[<skeleton default value>: invalid value for %define Boolean variable `foo'
]])
AT_CLEANUP