m4-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU M4 source repository branch, branch-1.6, updated. v1.5.89a-17-


From: Eric Blake
Subject: [SCM] GNU M4 source repository branch, branch-1.6, updated. v1.5.89a-17-g26b3c17
Date: Sat, 03 May 2008 19:39:17 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU M4 source repository".

http://git.sv.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=26b3c17ceb4f4155ff5dd13bcd9cc63039b3f242

The branch, branch-1.6 has been updated
       via  26b3c17ceb4f4155ff5dd13bcd9cc63039b3f242 (commit)
      from  f87a1e3fe98dd9bf9c746f24a0e8d18958c693e3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 26b3c17ceb4f4155ff5dd13bcd9cc63039b3f242
Author: Eric Blake <address@hidden>
Date:   Sat May 3 11:51:55 2008 -0600

    Document define_blind.
    
    * doc/m4.texinfo (Ifelse): Add a new composite macro.
    * THANKS: Update.
    Suggested by Mike R.
    
    Signed-off-by: Eric Blake <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog      |    7 ++++++
 THANKS         |    1 +
 doc/m4.texinfo |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1454e02..6362809 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-03  Eric Blake  <address@hidden>
+
+       Document define_blind.
+       * doc/m4.texinfo (Ifelse): Add a new composite macro.
+       * THANKS: Update.
+       Suggested by Mike R.
+
 2008-04-24  Eric Blake  <address@hidden>
 
        Fix debugmode regression from 2008-04-14.
diff --git a/THANKS b/THANKS
index eb2a79d..19c1d92 100644
--- a/THANKS
+++ b/THANKS
@@ -74,6 +74,7 @@ Michael Fetterman     address@hidden
 Michael L. Welcome     address@hidden
 Mike Frysinger         address@hidden
 Mike Lijewski          address@hidden
+Mike R.                        address@hidden
 Mikhail Teterin                address@hidden
 Nelson H. F. Beebe     address@hidden
 Nick S. Kanakakorn     address@hidden
diff --git a/doc/m4.texinfo b/doc/m4.texinfo
index 0da6b00..4781567 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texinfo
@@ -2761,6 +2761,63 @@ foo(`a', `b', `c')
 @result{}arguments:3
 @end example
 
+Since m4 is a macro language, it is even possible to write a macro that
+makes defining blind macros easier:
+
address@hidden Composite define_blind (@var{name}, @ovar{value})
+Defines @var{name} as a blind macro, such that @var{name} will expand to
address@hidden only when given explicit arguments.  @var{value} should not
+be the result of @code{defn} (@pxref{Defn}).  This macro is only
+recognized with parameters, and results in an empty string.
address@hidden deffn
+
+Defining a macro to define another macro can be a bit tricky.  We want
+to use a literal @samp{$#} in the argument to the nested @code{define}.
+However, if @samp{$} and @samp{#} are adjacent in the definition of
address@hidden, then it would be expanded as the number of
+arguments to @code{define_blind} rather than the intended number of
+arguments to @var{name}.  The solution is to pass the difficult
+characters through extra arguments to a helper macro
address@hidden
+
+As for the limitation against using @code{defn}, there are two reasons.
+If a macro was previously defined with @code{define_blind}, then it can
+safely be renamed to a new blind macro using plain @code{define}; using
address@hidden to rename it just adds another layer of
address@hidden, occupying memory and slowing down execution.  And if a
+macro is a builtin, then it would result in an attempt to define a macro
+consisting of both text and a builtin token; this is not supported, and
+the builtin token is flattened to an empty string.
+
+With that explanation, here's the definition, and some sample usage.
+Notice that @code{define_blind} is itself a blind macro.
+
address@hidden
+$ @kbd{m4 -d}
+define(`define_blind', `ifelse(`$#', `0', ``$0'',
+`_$0(`$1', `$2', `$'`#', `$'`0')')')
address@hidden
+define(`_define_blind', `define(`$1',
+`ifelse(`$3', `0', ``$4'', `$2')')')
address@hidden
+define_blind
address@hidden
+define_blind(`foo', `arguments were $*')
address@hidden
+foo
address@hidden
+foo(`bar')
address@hidden were bar
+define(`blah', defn(`foo'))
address@hidden
+blah
address@hidden
+blah(`a', `b')
address@hidden were a,b
+defn(`blah')
address@hidden(`$#', `0', ``$0'', `arguments were $*')
address@hidden example
+
 @cindex multibranches
 @cindex switch statement
 @cindex case statement


hooks/post-receive
--
GNU M4 source repository




reply via email to

[Prev in Thread] Current Thread [Next in Thread]