]> git.saurik.com Git - bison.git/commitdiff
muscle: factor the kind check in M4
authorAkim Demaille <akim@lrde.epita.fr>
Sat, 13 Apr 2013 07:30:05 +0000 (09:30 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Mon, 15 Apr 2013 08:37:00 +0000 (10:37 +0200)
* data/bison.m4 (b4_percent_define_check_kind): New.
Use it to check api.token.prefix.
* data/c++.m4: Check the kind of api.namespace.
* doc/bison.texi: Update a reference to former 'namespace' variable.
* tests/input.at ("%define" code variables): Check api.namespace.

data/bison.m4
data/c++.m4
doc/bison.texi
tests/input.at

index e96e1830334b91e453fbf365bf7e1c481b74f9d8..904bcf2be897bee452d10c97178a98174d1b1fdc 100644 (file)
@@ -847,6 +847,21 @@ m4_define([b4_percent_define_if_define],
 b4_percent_define_if_define_([$1], [$2], $[1], $[2])])
 
 
+# b4_percent_define_check_kind(VARIABLE, KIND, [DIAGNOSTIC = complain])
+# ---------------------------------------------------------------------
+m4_define([b4_percent_define_check_kind],
+[b4_percent_define_ifdef_([$1],
+  [m4_if(b4_percent_define_get_kind([[$1]]), [$2], [],
+    [b4_error([m4_default([$3], [complain])],
+              b4_percent_define_get_loc([$1]),
+              [m4_case([$2],
+                 [code], [[%%define variable '%s' requires '{...}' values]],
+                 [keyword], [[%%define variable '%s' requires '...' values]],
+                 [string], [[%%define variable '%s' requires '"..."' values]])],
+              [$1])])])dnl
+])
+
+
 # b4_percent_define_check_values(VALUES)
 # --------------------------------------
 # Mimic muscle_percent_define_check_values in ../src/muscle-tab.h exactly
@@ -1018,12 +1033,7 @@ b4_percent_define_ifdef([api.prefix],
 
 # api.token.prefix={...}
 # Make it a warning for those who used betas of Bison 3.0.
-b4_percent_define_ifdef([api.token.prefix],
-  [m4_if(b4_percent_define_get_kind([[api.token.prefix]]), [code], [],
-      [b4_error([deprecated],
-                b4_percent_define_get_loc([api.token.prefix]),
-                [[%%define variable '%s' requires '{...}' values]],
-                [api.token.prefix])])])
+b4_percent_define_check_kind([api.token.prefix], [code], [deprecated])
 
 # api.value.type >< %union.
 b4_percent_define_ifdef([api.value.type],
index e2c20fbd612dad753accace8e5f1b8b2318196c7..2d686b6b921f9cef065b080b32bb621e16590818 100644 (file)
@@ -25,6 +25,11 @@ m4_include(b4_pkgdatadir/[c.m4])
 m4_define([b4_comment],
 [b4_comment_([$1], [$2// ], [$2// ])])
 
+## -------- ##
+## Checks.  ##
+## -------- ##
+
+b4_percent_define_check_kind([api.namespace], [code], [deprecated])
 
 ## ---------------- ##
 ## Default values.  ##
@@ -38,6 +43,7 @@ b4_percent_define_default([[parser_class_name]], [[parser]])
 # b4_percent_define_default([[api.location.type]], [[location]])
 
 b4_percent_define_default([[filename_type]], [[std::string]])
+# Make it a warning for those who used betas of Bison 3.0.
 b4_percent_define_default([[api.namespace]], m4_defn([b4_prefix]))
 
 b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
index 58a14f8bc2fc3a9ee35c440b91ea666f135cc110..c36e2e270c4ab46e975bd3974c430f0389d204f2 100644 (file)
@@ -12758,7 +12758,7 @@ push parser, @code{yypush_parse}, @code{yypull_parse}, @code{yypstate},
 @code{yypstate_new} and @code{yypstate_delete} will also be renamed.  For
 example, if you use @samp{%name-prefix "c_"}, the names become
 @code{c_parse}, @code{c_lex}, and so on.  For C++ parsers, see the
-@code{%define namespace} documentation in this section.
+@code{%define api.namespace} documentation in this section.
 @end deffn
 
 
index 3dfed32d9e8a6fd4804a6ac5d58c83d792a3a784..d70eaad45a3ed46c6bea9ccfaed18eabe3f1fb0d 100644 (file)
@@ -1441,19 +1441,23 @@ AT_CLEANUP
 AT_SETUP([["%define" code variables]])
 
 m4_pushdef([AT_TEST],
-[AT_DATA([input.y],
-[[%define api.token.prefix ]$1[
+[AT_DATA([input.yy],
+[[%skeleton "lalr1.cc"
+%define api.namespace    ]$1[quux]$2[
+%define api.token.prefix ]$1[quux]$2[
+%token TOK // Otherwise api.token.prefix is unused.
 %%
-start: %empty;
+start: TOK;
 ]])
 
-AT_BISON_CHECK([[input.y]], [0], [],
-[[input.y:1.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated]
+AT_BISON_CHECK([[input.yy]], [0], [],
+[[input.yy:3.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated]
+input.yy:2.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated]
 ]])
 ])
 
-AT_TEST(["abc"])
-AT_TEST([abcde])
+AT_TEST([],  [])
+AT_TEST(["], ["])
 m4_popdef([AT_TEST])
 
 AT_CLEANUP