]> git.saurik.com Git - bison.git/blobdiff - data/bison.m4
also support $<foo>$ in the %initial-action
[bison.git] / data / bison.m4
index 1696f39a811e1418a596fa7a37f633d98f4050f4..178134a4eca812538622519464a73ce89cb3e785 100644 (file)
@@ -183,21 +183,6 @@ m4_define([b4_fatal_at],
 m4_exit(1)])
 
 
-## ---------------- ##
-## Default values.  ##
-## ---------------- ##
-
-# m4_define_default([b4_lex_param], [])   dnl breaks other skeletons
-m4_define_default([b4_pre_prologue], [])
-m4_define_default([b4_post_prologue], [])
-m4_define_default([b4_epilogue], [])
-m4_define_default([b4_parse_param], [])
-
-# The initial column and line.
-m4_define_default([b4_location_initial_column], [1])
-m4_define_default([b4_location_initial_line],   [1])
-
-
 ## ------------ ##
 ## Data Types.  ##
 ## ------------ ##
@@ -233,9 +218,9 @@ m4_define([b4_define_flag_if],
 
 # _b4_define_flag_if($1, $2, FLAG)
 # --------------------------------
-# This macro works around the impossibility to define macros
-# inside macros, because issuing `[$1]' is not possible in M4 :(.
-# This sucks hard, GNU M4 should really provide M5 like $$1.
+# Work around the impossibility to define macros inside macros,
+# because issuing `[$1]' is not possible in M4.  GNU M4 should provide
+# $$1 a la M5/TeX.
 m4_define([_b4_define_flag_if],
 [m4_if([$1$2], $[1]$[2], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
@@ -246,17 +231,17 @@ m4_define([b4_$3_if],
 # b4_FLAG_if(IF-TRUE, IF-FALSE)
 # -----------------------------
 # Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise.
-b4_define_flag_if([defines])           # Whether headers are requested.
-b4_define_flag_if([error_verbose])     # Whether error are verbose.
-b4_define_flag_if([glr])               # Whether a GLR parser is requested.
-b4_define_flag_if([locations])         # Whether locations are tracked.
-b4_define_flag_if([nondeterministic])  # Whether conflicts should be handled.
-b4_define_flag_if([yacc])              # Whether POSIX Yacc is emulated.
+b4_define_flag_if([defines])            # Whether headers are requested.
+b4_define_flag_if([error_verbose])      # Whether error are verbose.
+b4_define_flag_if([glr])                # Whether a GLR parser is requested.
+b4_define_flag_if([locations])          # Whether locations are tracked.
+b4_define_flag_if([nondeterministic])   # Whether conflicts should be handled.
+b4_define_flag_if([token_table])        # Whether yytoken_table is demanded.
+b4_define_flag_if([yacc])               # Whether POSIX Yacc is emulated.
 
+# yytoken_table is needed to support verbose errors.
+b4_error_verbose_if([m4_define([b4_token_table_flag], [1])])
 
-## ------------------------- ##
-## Assigning token numbers.  ##
-## ------------------------- ##
 
 
 ## ----------- ##
@@ -412,7 +397,7 @@ m4_define([b4_percent_define_get_loc],
           [m4_pushdef([b4_loc], m4_indir([b4_percent_define_loc(]$1[)]))dnl
 b4_loc[]dnl
 m4_popdef([b4_loc])],
-          [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_get_loc]], [$1])])])
+          [b4_fatal([[b4_percent_define_get_loc: undefined %%define variable '%s']], [$1])])])
 
 # b4_percent_define_get_syncline(VARIABLE)
 # ----------------------------------------
@@ -429,7 +414,7 @@ m4_popdef([b4_loc])],
 m4_define([b4_percent_define_get_syncline],
 [m4_ifdef([b4_percent_define_syncline(]$1[)],
           [m4_indir([b4_percent_define_syncline(]$1[)])],
-          [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_get_syncline]], [$1])])])
+          [b4_fatal([[b4_percent_define_get_syncline: undefined %%define variable '%s']], [$1])])])
 
 # b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
 # ------------------------------------------------------
@@ -467,7 +452,7 @@ m4_define([b4_percent_define_flag_if],
                                            [[invalid value for %%define Boolean variable '%s']],
                                            [$1])],
                            [[b4_percent_define_flag_if($1)]])])],
-  [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_flag_if]], [$1])])])
+  [b4_fatal([[b4_percent_define_flag_if: undefined %%define variable '%s']], [$1])])])
 
 # b4_percent_define_default(VARIABLE, DEFAULT)
 # --------------------------------------------
@@ -524,7 +509,7 @@ m4_define([_b4_percent_define_check_values],
                                      [[accepted value: '%s']],
                                      m4_dquote(b4_value))])])dnl
    m4_popdef([b4_good_value])],
-  [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_check_values]], [$1])])])
+  [b4_fatal([[b4_percent_define_check_values: undefined %%define variable '%s']], [$1])])])
 
 # b4_percent_code_get([QUALIFIER])
 # --------------------------------
@@ -576,3 +561,26 @@ m4_wrap_lifo([
 b4_check_user_names_wrap([[define]], [[variable]])
 b4_check_user_names_wrap([[code]], [[qualifier]])
 ])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+# m4_define_default([b4_lex_param], [])   dnl breaks other skeletons
+m4_define_default([b4_pre_prologue], [])
+m4_define_default([b4_post_prologue], [])
+m4_define_default([b4_epilogue], [])
+m4_define_default([b4_parse_param], [])
+
+# The initial column and line.
+m4_define_default([b4_location_initial_column], [1])
+m4_define_default([b4_location_initial_line],   [1])
+
+# Sanity checks.
+b4_percent_define_ifdef([api.prefix],
+[m4_ifdef([b4_prefix],
+[b4_complain_at(b4_percent_define_get_loc([api.prefix]),
+                [['%s' and '%s' cannot be used together]],
+                [%name-prefix],
+                [%define api.prefix])])])