]> git.saurik.com Git - bison.git/commitdiff
skeletons: b4_dollar_pushdef and popdef to simpify complex definitions
authorAkim Demaille <akim@lrde.epita.fr>
Fri, 27 Jul 2012 11:47:24 +0000 (13:47 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Fri, 27 Jul 2012 11:47:24 +0000 (13:47 +0200)
M4 is really making it uselessly hard to define macros that define
macros.
* data/c.m4 (b4_dollar_pushdef, b4_dollar_popdef): New.
Use it.

data/c.m4

index 3954613bfb7c5e992678356315c110c156fcaf2a..12794e06c64614cdc53a25eeb67d6822b5a5d5b2 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -427,6 +427,21 @@ m4_define([b4_dollar_dollar_],
                  [(*$1)])],
        [($1->$2)])])
 
                  [(*$1)])],
        [($1->$2)])])
 
+# b4_dollar_pushdef(VALUE, DEFAULT-FIELD, LOCATION)
+# b4_dollar_popdef
+# -------------------------------------------------
+# Define b4_dollar_dollar for VALUE and DEFAULT-FIELD,
+# and b4_at_dollar for LOCATION.
+m4_define([b4_dollar_pushdef],
+[m4_pushdef([b4_dollar_dollar],
+   [b4_dollar_dollar_([$1], m4_dquote($][1), [$2])])dnl
+m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
+])
+m4_define([b4_dollar_popdef],
+[m4_popdef([b4_at_dollar])dnl
+m4_popdef([b4_dollar_dollar])dnl
+])
+
 
 # b4_symbol_actions(FILENAME, LINENO,
 #                   SYMBOL-TAG, SYMBOL-NUM,
 
 # b4_symbol_actions(FILENAME, LINENO,
 #                   SYMBOL-TAG, SYMBOL-NUM,
@@ -437,16 +452,13 @@ m4_define([b4_dollar_dollar_],
 # Define b4_dollar_dollar([TYPE-NAME]), and b4_at_dollar, which are
 # invoked where $<TYPE-NAME>$ and @$ were specified by the user.
 m4_define([b4_symbol_actions],
 # Define b4_dollar_dollar([TYPE-NAME]), and b4_at_dollar, which are
 # invoked where $<TYPE-NAME>$ and @$ were specified by the user.
 m4_define([b4_symbol_actions],
-[m4_pushdef([b4_dollar_dollar],
-   [b4_dollar_dollar_([yyvaluep], m4_dquote($][1), [$6])])dnl
-m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
+[b4_dollar_pushdef([yyvaluep], [$6], [(*yylocationp)])dnl
       case $4: /* $3 */
 b4_syncline([$2], [$1])
        $5;
 b4_syncline([@oline@], [@ofile@])
        break;
       case $4: /* $3 */
 b4_syncline([$2], [$1])
        $5;
 b4_syncline([@oline@], [@ofile@])
        break;
-m4_popdef([b4_at_dollar])dnl
-m4_popdef([b4_dollar_dollar])dnl
+b4_dollar_popdef[]dnl
 ])
 
 
 ])