]> git.saurik.com Git - bison.git/blobdiff - src/muscle_tab.c
List accepted values for a %define enum variable with an invalid value.
[bison.git] / src / muscle_tab.c
index afe59becab0be10d0f144e2b3d0b61d2c6fda364..8e2a3e2d86107a4ed2269f72b5bb4d32a85b8193 100644 (file)
@@ -1,7 +1,7 @@
 /* Muscle table manager for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 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.
 
@@ -85,7 +85,6 @@ muscle_init (void)
 
   /* Version and input file.  */
   MUSCLE_INSERT_STRING ("version", VERSION);
-  MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
 }
 
 
@@ -540,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);
     }
 }
 
@@ -555,35 +553,40 @@ muscle_percent_define_check_values (char const * const *values)
 {
   for (; *values; ++values)
     {
-      char const *variable = *values;
+      char const * const *variablep = values;
       char const *name;
       char *value;
 
-      MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")");
+      MUSCLE_USER_NAME_CONVERT (name, "percent_define(", *variablep, ")");
 
       value = muscle_string_decode (name);
       if (value)
         {
-          bool valid = false;
           for (++values; *values; ++values)
             {
               if (0 == strcmp (value, *values))
-                {
-                  valid = true;
-                  while (*values)
-                    ++values;
-                  break;
-                }
+                break;
+            }
+          if (!*values)
+            {
+              location loc = muscle_percent_define_get_loc (*variablep);
+              complain_at(loc,
+                          _("invalid value for %%define variable `%s': `%s'"),
+                          *variablep, value);
+              for (values = variablep + 1; *values; ++values)
+                complain_at (loc, _("accepted value: `%s'"), *values);
+            }
+          else
+            {
+              while (*values)
+                ++values;
             }
-          if (!valid)
-            complain_at(muscle_percent_define_get_loc (variable),
-                        _("invalid value for %%define variable `%s': `%s'"),
-                        variable, value);
           free (value);
         }
       else
-        fatal(_("undefined %%define variable `%s' passed to muscle_percent_define_check_values"),
-              variable);
+        fatal(_("undefined %%define variable `%s' passed to"
+                " muscle_percent_define_check_values"),
+              *variablep);
     }
 }