]> git.saurik.com Git - bison.git/blobdiff - data/bison.m4
Pacify ./configure --enable-gcc-warnings.
[bison.git] / data / bison.m4
index adc8d996cdd477f4c5ebae8831c5eb718fb5b54b..332aa7bc77ee1e38bebc0899fdd560d6b2226804 100644 (file)
@@ -3,20 +3,18 @@
 # Language-independent M4 Macros for Bison.
 # Copyright (C) 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
-
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-
+#
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 ## ---------------- ##
@@ -32,10 +30,10 @@ b4_comment([$1
 
 m4_text_wrap([Copyright (C) $2 Free Software Foundation, Inc.], [   ])
 
-This program is free software; you can redistribute it and/or modify
+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
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -43,9 +41,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.])
+along with this program.  If not, see <http://www.gnu.org/licenses/>.])
 
 b4_comment([As a special exception, you may create a larger work that contains
 part or all of the Bison parser skeleton and distribute that work
@@ -285,11 +281,11 @@ b4_define_user_code([pre_prologue])
 b4_define_user_code([stype])
 
 
-# b4_check_user_names(WHAT, USER-LIST, SKELETON-NAMESPACE)
+# b4_check_user_names(WHAT, USER-LIST, BISON-NAMESPACE)
 # --------------------------------------------------------
 # Warn if any name of type WHAT is used by the user (as recorded in USER-LIST)
-# but is not used by the skeleton (as recorded by macros in the namespace
-# SKELETON-NAMESPACE).
+# but is not used by Bison (as recorded by macros in the namespace
+# BISON-NAMESPACE).
 #
 # USER-LIST must expand to a list specifying all grammar occurrences of all
 # names of type WHAT.   Each item in the list must be a triplet specifying one
@@ -304,22 +300,22 @@ b4_define_user_code([stype])
 #               [[[[bar]], [[parser.y:5.7]], [[parser.y:5.16]]]],
 #               [[[[baz]], [[parser.y:8.7]], [[parser.y:8.16]]]]]])
 #
-# The macro SKELETON-NAMESPACE(bar) must be defined iff the name bar of type
-# WHAT is used in the skeleton.  Empty string names are fine, but it would be
-# ugly for a Bison skeleton to actually use one.
+# The macro BISON-NAMESPACE(bar) must be defined iff the name bar of type WHAT
+# is used by Bison (in the front-end or in the skeleton).  Empty string names
+# are fine, but it would be ugly for Bison to actually use one.
 #
-# For example, to use b4_foo_skeleton_names for SKELETON-NAMESPACE and define
-# that the names bar and baz are used in the skeleton:
+# For example, to use b4_foo_bison_names for BISON-NAMESPACE and define that
+# the names bar and baz are used by Bison:
 #
-#   m4_define([b4_foo_skeleton_names(bar)])
-#   m4_define([b4_foo_skeleton_names(baz)])
+#   m4_define([b4_foo_bison_names(bar)])
+#   m4_define([b4_foo_bison_names(baz)])
 #
 # To invoke b4_check_user_names with TYPE foo, with USER-LIST
-# b4_foo_user_names, with SKELETON-NAMESPACE b4_foo_skeleton_names, and with
-# correct quoting:
+# b4_foo_user_names, with BISON-NAMESPACE b4_foo_bison_names, and with correct
+# quoting:
 #
 #   b4_check_user_names([[foo]], [b4_foo_user_names],
-#                       [[b4_foo_skeleton_names]])
+#                       [[b4_foo_bison_names]])
 m4_define([b4_check_user_names],
 [m4_foreach([b4_occurrence], $2,
 [m4_pushdef([b4_occurrence], b4_occurrence)dnl
@@ -328,7 +324,7 @@ m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))dnl
 m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))dnl
 m4_ifndef($3[(]m4_quote(b4_user_name)[)],
           [b4_warn_at([b4_start], [b4_end],
-                      [[@gettext<%s `%s' is not used@>]],
+                      [[%s `%s' is not used]],
                       [$1], [b4_user_name])])[]dnl
 m4_popdef([b4_occurrence])dnl
 m4_popdef([b4_user_name])dnl
@@ -338,35 +334,82 @@ m4_popdef([b4_end])dnl
 
 # b4_percent_define_get(VARIABLE)
 # -------------------------------
-# If the %define variable VARIABLE is defined, emit its value.  Also, record
-# the skeleton's usage of VARIABLE by defining
-# b4_percent_define_skeleton_variables(VARIABLE).
+# Mimic muscle_percent_define_get in ../src/muscle_tab.h exactly.  That is, if
+# the %define variable VARIABLE is defined, emit its value.  Also, record
+# Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
 #
 # For example:
 #
 #   b4_percent_define_get([[foo]])
 m4_define([b4_percent_define_get],
-[m4_define([b4_percent_define_skeleton_variables(]$1[)])dnl
+[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
 m4_ifdef([b4_percent_define(]$1[)], [m4_indir([b4_percent_define(]$1[)])])])
 
+# b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
+# ------------------------------------------------------
+# Mimic muscle_percent_define_ifdef in ../src/muscle_tab.h exactly.  That is,
+# if the %define variable VARIABLE is defined, expand IF-TRUE, else expand
+# IF-FALSE.  Also, record Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
+#
+# For example:
+#
+#   b4_percent_define_ifdef([[foo]], [[it's defined]], [[it's undefined]])
+m4_define([b4_percent_define_ifdef],
+[m4_ifdef([b4_percent_define(]$1[)],
+         [m4_define([b4_percent_define_bison_variables(]$1[)])$2],
+         [$3])])
+
+# b4_percent_define_flag_if(VARIABLE, IF-TRUE, [IF-FALSE])
+# --------------------------------------------------------
+# Mimic muscle_percent_define_flag_if in ../src/muscle_tab.h exactly.  That is,
+# if the %define variable VARIABLE is defined to "" or "true", expand IF-TRUE.
+# If it is defined to "false", expand IF-FALSE.  Complain if it is undefined
+# (a Bison or skeleton error since the default value should have been set
+# already) or defined to any other value (possibly a user error).  Also, record
+# Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
+#
+# For example:
+#
+#   b4_percent_define_flag_if([[foo]], [[it's true]], [[it's false]])
+m4_define([b4_percent_define_flag_if],
+[b4_percent_define_ifdef([$1],
+  [m4_case(b4_percent_define_get([$1]),
+           [], [$2], [true], [$2], [false], [$3],
+           [m4_expand_once([dnl
+             m4_pushdef([b4_loc], m4_indir([b4_percent_define_loc(]$1[)]))dnl
+             b4_complain_at(b4_loc,
+                            [[invalid value for %%define Boolean variable `%s']],
+                            [$1])dnl
+             m4_popdef([b4_loc])],
+             [[b4_percent_define_flag_if($1)]])])],
+  [b4_fatal([[undefined %%define variable `%s' passed to b4_percent_define_flag_if]], [$1])])])
+
 # b4_percent_define_default(VARIABLE, DEFAULT)
 # --------------------------------------------
-# If the %define variable VARIABLE is undefined, set its value to DEFAULT.
+# Mimic muscle_percent_define_default in ../src/muscle_tab.h exactly.  That is,
+# if the %define variable VARIABLE is undefined, set its value to DEFAULT.
+# Don't record this as a Bison usage of VARIABLE as there's no reason to
+# suspect that the value has yet influenced the output.
 #
 # For example:
 #
 #   b4_percent_define_default([[foo]], [[default value]])
 m4_define([b4_percent_define_default],
 [m4_ifndef([b4_percent_define(]$1[)],
-           [m4_define([b4_percent_define(]$1[)], [$2])])])
+           [m4_define([b4_percent_define(]$1[)], [$2])dnl
+            m4_define([b4_percent_define_loc(]$1[)],
+                      [[[[[Bison:b4_percent_define_default]:0.0]], [[[Bison:b4_percent_define_default]:0.0]]]])])])
 
 # b4_percent_code_get([QUALIFIER])
 # --------------------------------
 # If any %code blocks for QUALIFIER are defined, emit them beginning with a
 # comment and ending with synclines and a newline.  If QUALIFIER is not
-# specified (thus, b4_percent_code_get is invoked without parens), do this for
-# the unqualified %code blocks.  Also, record the skeleton's usage of QUALIFIER
-# (if specified) by defining b4_percent_code_skeleton_qualifiers(QUALIFIER).
+# specified or empty, do this for the unqualified %code blocks.  Also, record
+# Bison's usage of QUALIFIER (if specified) by defining
+# b4_percent_code_bison_qualifiers(QUALIFIER).
 #
 # For example, to emit any unqualified %code blocks followed by any %code
 # blocks for the qualifier foo:
@@ -374,9 +417,8 @@ m4_define([b4_percent_define_default],
 #   b4_percent_code_get
 #   b4_percent_code_get([[foo]])
 m4_define([b4_percent_code_get],
-[m4_pushdef([b4_macro_name], [[b4_percent_code]]m4_if([$#], [1], [[[(]$1[)]]],
-                                                      [[[_unqualified]]]))dnl
-m4_if([$#], [1], [m4_define([b4_percent_code_skeleton_qualifiers(]$1[)])])dnl
+[m4_pushdef([b4_macro_name], [[b4_percent_code(]$1[)]])dnl
+m4_ifval([$1], [m4_define([b4_percent_code_bison_qualifiers(]$1[)])])dnl
 m4_ifdef(b4_macro_name,
 [b4_comment([m4_if([$#], [0], [[Unqualified %code]],
                    [[%code "]$1["]])[ blocks.]])
@@ -384,17 +426,28 @@ b4_user_code([m4_indir(b4_macro_name)])
 ])dnl
 m4_popdef([b4_macro_name])])
 
+# b4_percent_code_ifdef(QUALIFIER, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------
+# If any %code blocks for QUALIFIER (or unqualified %code blocks if
+# QUALIFIER is empty) are defined, expand IF-TRUE, else expand IF-FALSE.
+# Also, record Bison's usage of QUALIFIER (if specified) by defining
+# b4_percent_code_bison_qualifiers(QUALIFIER).
+m4_define([b4_percent_code_ifdef],
+[m4_ifdef([b4_percent_code(]$1[)],
+          [m4_ifval([$1], [m4_define([b4_percent_code_bison_qualifiers(]$1[)])])$2],
+         [$3])])
+
 
-## --------------------------------------------------------- ##
-## After processing the skeletons, check that all the user's ##
-## %define variables and %code qualifiers were used.         ##
-## --------------------------------------------------------- ##
+## ----------------------------------------------------------- ##
+## After processing the skeletons, check that all the user's   ##
+## %define variables and %code qualifiers were used by Bison.  ##
+## ----------------------------------------------------------- ##
 
 m4_define([b4_check_user_names_wrap],
 [m4_ifdef([b4_percent_]$1[_user_]$2[s],
           [b4_check_user_names([[%]$1 $2],
                                [b4_percent_]$1[_user_]$2[s],
-                               [[b4_percent_]$1[_skeleton_]$2[s]])])])
+                               [[b4_percent_]$1[_bison_]$2[s]])])])
 
 m4_wrap([
 b4_check_user_names_wrap([[define]], [[variable]])