]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
Make m4_defun_init more robust.
authorEric Blake <ebb9@byu.net>
Fri, 24 Oct 2008 17:24:32 +0000 (11:24 -0600)
committerEric Blake <ebb9@byu.net>
Fri, 24 Oct 2008 17:24:32 +0000 (11:24 -0600)
* lib/m4sugar/m4sugar.m4 (m4_defun_init): Handle indirect macro
names, and correct number of arguments.
(m4_copy): Also set up location of the copy.
(m4_defun): When copied, use current macro name, not original.
* tests/m4sugar.at (m4@&t@_require: one-shot initialization):
Update test.

Signed-off-by: Eric Blake <ebb9@byu.net>
ChangeLog
lib/m4sugar/m4sugar.m4
tests/m4sugar.at

index ac48cd9b64132ab9c98191e83d9ee2b62ee31958..18ac8e0377ad5ec0a0d0b7f15084e43499935ab6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2008-10-24  Eric Blake  <ebb9@byu.net>
 
+       Make m4_defun_init more robust.
+       * lib/m4sugar/m4sugar.m4 (m4_defun_init): Handle indirect macro
+       names, and correct number of arguments.
+       (m4_copy): Also set up location of the copy.
+       (m4_defun): When copied, use current macro name, not original.
+       * tests/m4sugar.at (m4@&t@_require: one-shot initialization):
+       Update test.
+
        Optimize clients of AS_REQUIRE.
        * lib/m4sugar/m4sugar.m4 (m4_defun): Add undocumented third
        argument.
index 13a1ddb2bc67e29bef640f5afbf79b849f90617e..22c38e8d0df1c9a2d92b989d4d6e38f00feed4c9 100644 (file)
@@ -544,7 +544,8 @@ m4_define([_m4_bpatsubsts],
 m4_define([m4_copy],
 [m4_ifdef([$2], [m4_fatal([$0: won't overwrite defined macro: $2])],
          [_$0([$1], [m4_tmp])_$0([m4_tmp], [$2],
-  [m4_pushdef([$1], _m4_defn([m4_tmp]))])])])
+  [m4_pushdef([$1], _m4_defn([m4_tmp]))])m4_ifdef([m4_location($1)],
+  [m4_define([m4_location($2)], m4_location)])])])
 m4_define([_m4_copy],
 [m4_ifdef([$1], [m4_pushdef([$2], _m4_defn([$1]))$3[]_m4_popdef([$1])$0($@)])])
 
@@ -1662,9 +1663,9 @@ m4_define([m4_divert_require],
 # previously m4_define'd definition so that subsequent use of the
 # macro is faster.
 m4_define([m4_defun],
-[m4_define([m4_location($1)], m4_location)dnl
-m4_default([$3], [m4_define])([$1],
-         [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])
+[m4_define([m4_location($1)], m4_location)]dnl
+[m4_default([$3], [m4_define])([$1],
+  [_m4_defun_pro(]m4_dquote($[0])[)$2[]_m4_defun_epi(]m4_dquote($[0])[)])])
 
 
 # m4_defun_init(NAME, INIT, COMMON)
@@ -1683,7 +1684,8 @@ m4_default([$3], [m4_define])([$1],
 # to m4_defun.
 m4_define([m4_defun_init],
 [m4_define([$1], [$3])m4_defun([$1],
-   [$2[]_m4_popdef(]m4_dquote([$][0])[)$][0($][@)], [m4_pushdef])])
+   [$2[]_m4_popdef(]m4_dquote($[0])[)m4_indir(]m4_dquote($[0])dnl
+[m4_if(]m4_dquote($[#])[, [0], [], ]m4_dquote([,$]@)[))], [m4_pushdef])])
 
 
 # m4_defun_once(NAME, EXPANSION)
index cfaed3bf6372e6dd9e8393944352c3ac5c2052c2..959b209daf5018bddac47c54eeaf3e66e7cfc13a 100644 (file)
@@ -200,7 +200,7 @@ AT_CLEANUP
 ## ---------------------- ##
 
 AT_SETUP([m4@&t@_require: one-shot initialization])
-AT_KEYWORDS([m4@&t@_defun_init])
+AT_KEYWORDS([m4@&t@_defun_init m4@&t@_copy])
 
 AT_CHECK_M4SUGAR_TEXT([[
 m4_defun_init([a], [[init a
@@ -210,12 +210,20 @@ m4_defun([c], [[c]m4_require([a])])dnl
 b
 c
 a
+m4_defun_init([-], [hello, ], [m4_if([$#], [0], [world], [[$1]])])dnl
+m4_copy([-], [.])dnl
+m4_indir([.])
+m4_indir([.], [goodbye])
+m4_indir([-], [again])
 ]], [[
 init a
 common a
 b
 c
 common a
+hello, world
+goodbye
+hello, again
 ]])
 AT_CLEANUP