X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/c1d19e10c32844d17122b473840752003521d21b..ad5feac4e2cd16569d8586f2eac6a9efeeadc038:/data/bison.m4
diff --git a/data/bison.m4 b/data/bison.m4
index f5a1a7c9..332aa7bc 100644
--- a/data/bison.m4
+++ b/data/bison.m4
@@ -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 .
## ---------------- ##
@@ -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 .])
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
@@ -338,61 +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])
# ------------------------------------------------------
-# If the %define variable VARIABLE is defined, expand IF-TRUE, else expand
-# IF-FALSE. Also, record the skeleton's usage of VARIABLE by defining
-# b4_percent_define_skeleton_variables(VARIABLE).
+# 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_skeleton_variables(]$1[)])$2],
+ [m4_define([b4_percent_define_bison_variables(]$1[)])$2],
[$3])])
# b4_percent_define_flag_if(VARIABLE, IF-TRUE, [IF-FALSE])
# --------------------------------------------------------
-# If the %define variable VARIABLE is defined to anything but "0" or "false",
-# expand IF-TRUE. If it is defined to "0" or "false", expand IF-FALSE. If
-# it is undefined, raise an error (this macro should be preceded by
-# b4_percent_define_default). Also, record the skeleton's usage of VARIABLE by
-# defining b4_percent_define_skeleton_variables(VARIABLE).
+# 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(
- [b4_complain([[invalid value for %%define variable `%s']], [$1])],
- [[b4_percent_define_flag_if($1)]])])],
- [b4_fatal([[invalid %%define variable `%s' passed to b4_percent_define_flag_if]], [$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 or empty, 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).
+# 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:
@@ -401,7 +418,7 @@ m4_define([b4_percent_define_default],
# b4_percent_code_get([[foo]])
m4_define([b4_percent_code_get],
[m4_pushdef([b4_macro_name], [[b4_percent_code(]$1[)]])dnl
-m4_ifval([$1], [m4_define([b4_percent_code_skeleton_qualifiers(]$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.]])
@@ -413,24 +430,24 @@ m4_popdef([b4_macro_name])])
# -----------------------------------------------------
# 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 the skeleton's usage of QUALIFIER (if specified) by defining
-# b4_percent_code_skeleton_qualifiers(QUALIFIER).
+# 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_skeleton_qualifiers(]$1[)])])$2],
+ [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]])