skeletons: b4_dollar_pushdef and popdef to simpify complex definitions

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.
This commit is contained in:
Akim Demaille
2012-07-27 13:47:24 +02:00
parent 93e3dbab95
commit d6a44ffd00

View File

@@ -427,6 +427,21 @@ m4_define([b4_dollar_dollar_],
[(*$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,
@@ -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],
[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;
m4_popdef([b4_at_dollar])dnl
m4_popdef([b4_dollar_dollar])dnl
b4_dollar_popdef[]dnl
])