bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Fix strange %define locations for default values.


From: Joel E. Denny
Subject: [PATCH] Fix strange %define locations for default values.
Date: Fri, 3 Apr 2009 04:16:43 -0400 (EDT)

I pushed this to master and to branch-2.4.2.

>From 580c075d7f6a06d84149fd789a42528371621b7d Mon Sep 17 00:00:00 2001
From: Joel E. Denny <address@hidden>
Date: Fri, 3 Apr 2009 03:13:36 -0400
Subject: [PATCH] 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.

diff --git a/ChangeLog b/ChangeLog
index 0bebbdf..e0c738b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2009-04-03  Joel E. Denny  <address@hidden>
+
+       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.
+
 2008-11-07  Akim Demaille  <address@hidden>
 
        Locations without columns for command line arguments.
diff --git a/data/bison.m4 b/data/bison.m4
index bad6296..f9dd503 100644
--- a/data/bison.m4
+++ b/data/bison.m4
@@ -1,8 +1,8 @@
                                                             -*- Autoconf -*-
 
 # Language-independent M4 Macros 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 program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -464,10 +464,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)
 # --------------------------------------
diff --git a/src/location.c b/src/location.c
index 98627a5..4cbfd8d 100644
--- a/src/location.c
+++ b/src/location.c
@@ -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
diff --git a/src/location.h b/src/location.h
index efd256d..a99232b 100644
--- a/src/location.h
+++ b/src/location.h
@@ -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.
diff --git a/src/muscle_tab.c b/src/muscle_tab.c
index afe59be..4341571 100644
--- a/src/muscle_tab.c
+++ b/src/muscle_tab.c
@@ -1,6 +1,6 @@
 /* Muscle table manager for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -540,13 +540,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);
     }
 }
 
diff --git a/tests/skeletons.at b/tests/skeletons.at
index 3845d3d..60fc117 100644
--- a/tests/skeletons.at
+++ b/tests/skeletons.at
@@ -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
-- 
1.5.4.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]