m4-patches
[Top][All Lists]
Advanced

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

Re: improved error messages


From: Eric Blake
Subject: Re: improved error messages
Date: Sat, 24 Nov 2007 07:08:15 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071031 Thunderbird/2.0.0.9 Mnenhy/0.7.5.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 11/23/2007 4:29 PM:
>> 2007-11-22  Eric Blake  <address@hidden>
> 
>>         More error messages tied to macro names.

And while I'm at it, I found it easier if both branch and head passed just
a macro name to m4_bad_argc and m4_numeric_arg rather than the entire argv
structure.  So head needed this patch:

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHSDBO84KuGfSFAYARAv5WAJ9eAcDR92GigvpBsA6zCq515Rb9ZwCgi4f1
u/EiYgjfarZ/WGIgYE4T/V0=
=PEGF
-----END PGP SIGNATURE-----
>From 32ab6f9f819643ec7187bf1680d582eb8f131774 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 24 Nov 2007 07:04:18 -0700
Subject: [PATCH] Pass only macro name to utility functions.

* m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
* m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
implementation.
* m4/macro.c (m4_macro_call): Adjust callers.
* modules/gnu.c (builtin, debuglen): Likewise.
* modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
(substr): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/stdlib.c (setenv, getpwuid, srand): Likewise.
* modules/time.c (ctime, gmtime, localtime, mktime, strftime):
Likewise.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog           |   15 +++++++++++++++
 m4/m4module.h       |    4 ++--
 m4/macro.c          |    2 +-
 m4/utility.c        |   38 ++++++++++++++++++--------------------
 modules/evalparse.c |   34 +++++++++++++++++-----------------
 modules/gnu.c       |   29 +++++++++++++++--------------
 modules/m4.c        |   27 +++++++++++++++------------
 modules/stdlib.c    |    6 +++---
 modules/time.c      |   23 ++++++++++++-----------
 9 files changed, 98 insertions(+), 80 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0b02b24..f71a00f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2007-11-24  Eric Blake  <address@hidden>
+
+       Pass only macro name to utility functions.
+       * m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
+       * m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
+       implementation.
+       * m4/macro.c (m4_macro_call): Adjust callers.
+       * modules/gnu.c (builtin, debuglen): Likewise.
+       * modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
+       (substr): Likewise.
+       * modules/evalparse.c (m4_evaluate): Likewise.
+       * modules/stdlib.c (setenv, getpwuid, srand): Likewise.
+       * modules/time.c (ctime, gmtime, localtime, mktime, strftime):
+       Likewise.
+
 2007-11-23  Eric Blake  <address@hidden>
 
        Add macro name to debugfile messages.
diff --git a/m4/m4module.h b/m4/m4module.h
index 8b59e15..01514db 100644
--- a/m4/m4module.h
+++ b/m4/m4module.h
@@ -102,9 +102,9 @@ struct m4_macro
 
 #define M4ARG(i)       (argc > (i) ? m4_get_symbol_value_text (argv[i]) : "")
 
-extern bool    m4_bad_argc        (m4 *, int, m4_symbol_value **,
+extern bool    m4_bad_argc        (m4 *, int, const char *,
                                    unsigned int, unsigned int, bool);
-extern bool    m4_numeric_arg     (m4 *, int, m4_symbol_value **, int, int *);
+extern bool    m4_numeric_arg     (m4 *, const char *, const char *, int *);
 extern void    m4_dump_args       (m4 *, m4_obstack *, int,
                                    m4_symbol_value **, const char *, bool);
 extern bool    m4_parse_truth_arg (m4 *, const char *, const char *, bool);
diff --git a/m4/macro.c b/m4/macro.c
index ffe55f7..dd93152 100644
--- a/m4/macro.c
+++ b/m4/macro.c
@@ -389,7 +389,7 @@ void
 m4_macro_call (m4 *context, m4_symbol_value *value, m4_obstack *expansion,
               int argc, m4_symbol_value **argv)
 {
-  if (m4_bad_argc (context, argc, argv,
+  if (m4_bad_argc (context, argc, m4_get_symbol_value_text (argv[0]),
                   VALUE_MIN_ARGS (value), VALUE_MAX_ARGS (value),
                   BIT_TEST (VALUE_FLAGS (value),
                             VALUE_SIDE_EFFECT_ARGS_BIT)))
diff --git a/m4/utility.c b/m4/utility.c
index 1839ea1..a8873f3 100644
--- a/m4/utility.c
+++ b/m4/utility.c
@@ -27,7 +27,7 @@
 #include "verror.h"
 #include "xvasprintf.h"
 
-static const char * skip_space (m4 *, const char *);
+static const char *skip_space (m4 *, const char *);
 
 
 
@@ -36,23 +36,23 @@ static const char * skip_space (m4 *, const char *);
    number of acceptable arguments, MAX is the 0-based maximum number
    or UINT_MAX if not applicable, and SIDE_EFFECT is true if the macro
    has side effects even if min is not satisfied.  ARGC is the 1-based
-   count of ARGV, where ARGV[0] is the name of the macro.  Return true
-   if the macro is guaranteed to expand to the empty string, false
-   otherwise.  */
+   count of supplied arguments, and CALLER is the name of the macro.
+   Return true if the macro is guaranteed to expand to the empty
+   string, false otherwise.  */
 bool
-m4_bad_argc (m4 *context, int argc, m4_symbol_value **argv,
-            unsigned int min, unsigned int max, bool side_effect)
+m4_bad_argc (m4 *context, int argc, const char *caller, unsigned int min,
+            unsigned int max, bool side_effect)
 {
   if (argc - 1 < min)
     {
-      m4_warn (context, 0, M4ARG (0), _("too few arguments: %d < %d"),
+      m4_warn (context, 0, caller, _("too few arguments: %d < %d"),
               argc - 1, min);
-      return ! side_effect;
+      return !side_effect;
     }
 
   if (argc - 1 > max)
     {
-      m4_warn (context, 0, M4ARG (0), _("extra arguments ignored: %d > %d"),
+      m4_warn (context, 0, caller, _("extra arguments ignored: %d > %d"),
               argc - 1, max);
     }
 
@@ -68,28 +68,26 @@ skip_space (m4 *context, const char *arg)
 }
 
 /* The function m4_numeric_arg () converts ARG to an int pointed to by
-   VALUEP. If the conversion fails, print error message for macro.
+   VALUEP. If the conversion fails, print error message for CALLER.
    Return true iff conversion succeeds.  */
 /* FIXME: Convert this to use gnulib's xstrtoimax, xstrtoumax.
    Otherwise, we are arbitrarily limiting integer values.  */
 bool
-m4_numeric_arg (m4 *context, int argc, m4_symbol_value **argv,
-               int arg, int *valuep)
+m4_numeric_arg (m4 *context, const char *caller, const char *arg, int *valuep)
 {
   char *endp;
 
-  if (*M4ARG (arg) == '\0')
+  if (*arg == '\0')
     {
       *valuep = 0;
-      m4_warn (context, 0, M4ARG (0), _("empty string treated as 0"));
+      m4_warn (context, 0, caller, _("empty string treated as 0"));
     }
   else
     {
-      *valuep = strtol (skip_space (context, M4ARG (arg)), &endp, 10);
+      *valuep = strtol (skip_space (context, arg), &endp, 10);
       if (*skip_space (context, endp) != 0)
        {
-         m4_warn (context, 0, M4ARG (0), _("non-numeric argument `%s'"),
-                  M4ARG (arg));
+         m4_warn (context, 0, caller, _("non-numeric argument `%s'"), arg);
          return false;
        }
     }
@@ -164,7 +162,7 @@ m4_verror_at_line (m4 *context, bool warn, int status, int 
errnum,
                  full ? full : format, args);
   free (full);
   if ((!warn || m4_get_fatal_warnings_opt (context))
-      && ! m4_get_exit_status (context))
+      && !m4_get_exit_status (context))
     m4_set_exit_status (context, EXIT_FAILURE);
 }
 
@@ -182,7 +180,7 @@ m4_error (m4 *context, int status, int errnum, const char 
*macro,
 {
   va_list args;
   int line = m4_get_current_line (context);
-  assert (m4_get_current_file (context) || ! line);
+  assert (m4_get_current_file (context) || !line);
   va_start (args, format);
   if (status == EXIT_SUCCESS && m4_get_warnings_exit_opt (context))
     status = EXIT_FAILURE;
@@ -228,7 +226,7 @@ m4_warn (m4 *context, int errnum, const char *macro, const 
char *format, ...)
       va_list args;
       int status = EXIT_SUCCESS;
       int line = m4_get_current_line (context);
-      assert (m4_get_current_file (context) || ! line);
+      assert (m4_get_current_file (context) || !line);
       va_start (args, format);
       if (m4_get_warnings_exit_opt (context))
        status = EXIT_FAILURE;
diff --git a/modules/evalparse.c b/modules/evalparse.c
index b4639b0..260ee1a 100644
--- a/modules/evalparse.c
+++ b/modules/evalparse.c
@@ -887,38 +887,40 @@ simple_term (m4 *context, eval_token et, number *v1)
 void
 m4_evaluate (m4 *context, m4_obstack *obs, int argc, m4_symbol_value **argv)
 {
+  const char * me      = M4ARG (0);
+  const char * str     = M4ARG (1);
   int          radix   = 10;
   int          min     = 1;
   number       val;
   eval_token   et;
   eval_error   err     = NO_ERROR;
 
-  if (*M4ARG (2) && !m4_numeric_arg (context, argc, argv, 2, &radix))
+  if (*M4ARG (2) && !m4_numeric_arg (context, me, M4ARG (2), &radix))
     return;
 
   if (radix < 1 || radix > 36)
     {
-      m4_warn (context, 0, M4ARG (0), _("radix out of range: %d"), radix);
+      m4_warn (context, 0, me, _("radix out of range: %d"), radix);
       return;
     }
 
-  if (argc >= 4 && !m4_numeric_arg (context, argc, argv, 3, &min))
+  if (argc >= 4 && !m4_numeric_arg (context, me, M4ARG (3), &min))
     return;
 
   if (min < 0)
     {
-      m4_warn (context, 0, M4ARG (0), _("negative width: %d"), min);
+      m4_warn (context, 0, me, _("negative width: %d"), min);
       return;
     }
 
   numb_initialise ();
-  eval_init_lex (M4ARG (1));
+  eval_init_lex (str);
 
   numb_init (val);
   et = eval_lex (&val);
   if (et == EOTEXT)
     {
-      m4_warn (context, 0, M4ARG (0), _("empty string treated as zero"));
+      m4_warn (context, 0, me, _("empty string treated as zero"));
       numb_set (val, numb_ZERO);
     }
   else
@@ -939,42 +941,40 @@ m4_evaluate (m4 *context, m4_obstack *obs, int argc, 
m4_symbol_value **argv)
       break;
 
     case MISSING_RIGHT:
-      m4_warn (context, 0, M4ARG (0), _("missing right parenthesis: %s"),
-              M4ARG (1));
+      m4_warn (context, 0, me, _("missing right parenthesis: %s"), str);
       break;
 
     case MISSING_COLON:
-      m4_warn (context, 0, M4ARG (0), _("missing colon: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("missing colon: %s"), str);
       break;
 
     case SYNTAX_ERROR:
-      m4_warn (context, 0, M4ARG (0), _("bad expression: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("bad expression: %s"), str);
       break;
 
     case UNKNOWN_INPUT:
-      m4_warn (context, 0, M4ARG (0), _("bad input: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("bad input: %s"), str);
       break;
 
     case EXCESS_INPUT:
-      m4_warn (context, 0, M4ARG (0), _("excess input: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("excess input: %s"), str);
       break;
 
     case INVALID_OPERATOR:
       /* POSIX requires an error here, unless XCU ERN 137 is approved.  */
-      m4_error (context, 0, 0, M4ARG (0), _("invalid operator: %s"),
-               M4ARG (1));
+      m4_error (context, 0, 0, me, _("invalid operator: %s"), str);
       break;
 
     case DIVIDE_ZERO:
-      m4_warn (context, 0, M4ARG (0), _("divide by zero: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("divide by zero: %s"), str);
       break;
 
     case MODULO_ZERO:
-      m4_warn (context, 0, M4ARG (0), _("modulo by zero: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("modulo by zero: %s"), str);
       break;
 
     case NEGATIVE_EXPONENT:
-      m4_warn (context, 0, M4ARG (0), _("negative exponent: %s"), M4ARG (1));
+      m4_warn (context, 0, me, _("negative exponent: %s"), str);
       break;
 
     default:
diff --git a/modules/gnu.c b/modules/gnu.c
index 1aba84b..e857632 100644
--- a/modules/gnu.c
+++ b/modules/gnu.c
@@ -405,25 +405,26 @@ M4BUILTIN_HANDLER (__program__)
  **/
 M4BUILTIN_HANDLER (builtin)
 {
+  const char *me = M4ARG (0);
   const char *name;
   m4_symbol_value *value;
 
-  if (! m4_is_symbol_value_text (argv[1]))
+  if (!m4_is_symbol_value_text (argv[1]))
     {
       if (m4_is_symbol_value_func (argv[1])
          && m4_get_symbol_value_func (argv[1]) == builtin_builtin)
        {
-         if (m4_bad_argc (context, argc, argv, 2, 2, false))
+         if (m4_bad_argc (context, argc, me, 2, 2, false))
            return;
-         if (! m4_is_symbol_value_text (argv[2]))
+         if (!m4_is_symbol_value_text (argv[2]))
            {
-             m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+             m4_warn (context, 0, me, _("invalid macro name ignored"));
              return;
            }
          name = M4ARG (2);
          value = m4_builtin_find_by_name (NULL, name);
          if (value == NULL)
-           m4_warn (context, 0, M4ARG (0), _("undefined builtin `%s'"), name);
+           m4_warn (context, 0, me, _("undefined builtin `%s'"), name);
          else
            {
              m4_push_builtin (context, value);
@@ -431,25 +432,25 @@ M4BUILTIN_HANDLER (builtin)
            }
        }
       else
-       m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+       m4_warn (context, 0, me, _("invalid macro name ignored"));
     }
   else
     {
       name = M4ARG (1);
       value = m4_builtin_find_by_name (NULL, name);
       if (value == NULL)
-       m4_warn (context, 0, M4ARG (0), _("undefined builtin `%s'"), name);
+       m4_warn (context, 0, me, _("undefined builtin `%s'"), name);
       else
        {
          const m4_builtin *bp = m4_get_symbol_value_builtin (value);
-         if (!m4_bad_argc (context, argc - 1, argv + 1,
+         if (!m4_bad_argc (context, argc - 1, name,
                            bp->min_args, bp->max_args,
                            (bp->flags & M4_BUILTIN_SIDE_EFFECT) != 0))
            {
              int i;
              if ((bp->flags & M4_BUILTIN_GROKS_MACRO) == 0)
                for (i = 2; i < argc; i++)
-                 if (! m4_is_symbol_value_text (argv[i]))
+                 if (!m4_is_symbol_value_text (argv[i]))
                    m4_set_symbol_value_text (argv[i], "");
              bp->func (context, obs, argc - 1, argv + 1);
            }
@@ -559,7 +560,7 @@ M4BUILTIN_HANDLER (debugfile)
 M4BUILTIN_HANDLER (debuglen)
 {
   int i;
-  if (!m4_numeric_arg (context, argc, argv, 1, &i))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
     return;
   /* FIXME - make m4_numeric_arg more powerful - we want to accept
      suffixes, and limit the result to size_t.  */
@@ -666,7 +667,7 @@ M4BUILTIN_HANDLER (format)
  **/
 M4BUILTIN_HANDLER (indir)
 {
-  if (! m4_is_symbol_value_text (argv[1]))
+  if (!m4_is_symbol_value_text (argv[1]))
     m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
   else
     {
@@ -678,9 +679,9 @@ M4BUILTIN_HANDLER (indir)
       else
        {
          int i;
-         if (! m4_symbol_groks_macro (symbol))
+         if (!m4_symbol_groks_macro (symbol))
            for (i = 2; i < argc; i++)
-             if (! m4_is_symbol_value_text (argv[i]))
+             if (!m4_is_symbol_value_text (argv[i]))
                m4_set_symbol_value_text (argv[i], "");
          m4_macro_call (context, m4_get_symbol_value (symbol), obs,
                         argc - 1, argv + 1);
@@ -784,7 +785,7 @@ M4BUILTIN_HANDLER (regexp)
 
       /* The first case is the most difficult, because the empty string
         is a valid RESYNTAX, yet we want `regexp(aab, a*, )' to return
-        an empty string as per M4 1.4.x!  */
+        an empty string as per M4 1.4.x.  */
 
       if ((*replace == '\0') || (resyntax < 0))
        /* regexp(VICTIM, REGEXP, REPLACEMENT) */
diff --git a/modules/m4.c b/modules/m4.c
index ec2372a..bffb274 100644
--- a/modules/m4.c
+++ b/modules/m4.c
@@ -246,6 +246,7 @@ M4BUILTIN_HANDLER (ifdef)
 
 M4BUILTIN_HANDLER (ifelse)
 {
+  const char *me = M4ARG (0);
   const char *result;
 
   /* The valid ranges of argc for ifelse is discontinuous, we cannot
@@ -253,11 +254,11 @@ M4BUILTIN_HANDLER (ifelse)
   if (argc == 2)
     return;
 
-  if (m4_bad_argc (context, argc, argv, 3, -1, false))
+  if (m4_bad_argc (context, argc, me, 3, -1, false))
     return;
   else if (argc % 3 == 0)
     /* Diagnose excess arguments if 5, 8, 11, etc., actual arguments.  */
-    m4_bad_argc (context, argc, argv, 0, argc - 2, false);
+    m4_bad_argc (context, argc, me, 0, argc - 2, false);
 
   argv++;
   argc--;
@@ -549,7 +550,7 @@ M4BUILTIN_HANDLER (incr)
 {
   int value;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &value))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
     return;
 
   m4_shipout_int (obs, value + 1);
@@ -559,7 +560,7 @@ M4BUILTIN_HANDLER (decr)
 {
   int value;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &value))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
     return;
 
   m4_shipout_int (obs, value - 1);
@@ -576,7 +577,7 @@ M4BUILTIN_HANDLER (divert)
   int i = 0;
   const char *text;
 
-  if (argc >= 2 && !m4_numeric_arg (context, argc, argv, 1, &i))
+  if (argc >= 2 && !m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
     return;
 
   m4_make_diversion (context, i);
@@ -613,7 +614,7 @@ M4BUILTIN_HANDLER (undivert)
        if (*endp == '\0' && !isspace ((unsigned char) *str))
          m4_insert_diversion (context, diversion);
        else if (m4_get_posixly_correct_opt (context))
-         m4_numeric_arg (context, argc, argv, i, &diversion);
+         m4_numeric_arg (context, me, str, &diversion);
        else
          {
            FILE *fp = m4_path_search (context, str, NULL);
@@ -825,7 +826,7 @@ M4BUILTIN_HANDLER (m4exit)
   int exit_code = EXIT_SUCCESS;
 
   /* Warn on bad arguments, but still exit.  */
-  if (argc >= 2 && !m4_numeric_arg (context, argc, argv, 1, &exit_code))
+  if (argc >= 2 && !m4_numeric_arg (context, me, M4ARG (1), &exit_code))
     exit_code = EXIT_FAILURE;
   if (exit_code < 0 || exit_code > 255)
     {
@@ -934,21 +935,23 @@ M4BUILTIN_HANDLER (index)
    substring extends to the end of the first argument.  */
 M4BUILTIN_HANDLER (substr)
 {
+  const char *me = M4ARG (0);
+  const char *str = M4ARG (1);
   int start = 0;
   int length;
   int avail;
 
   if (argc <= 2)
     {
-      obstack_grow (obs, M4ARG (1), strlen (M4ARG (1)));
+      obstack_grow (obs, str, strlen (str));
       return;
     }
 
-  length = avail = strlen (M4ARG (1));
-  if (!m4_numeric_arg (context, argc, argv, 2, &start))
+  length = avail = strlen (str);
+  if (!m4_numeric_arg (context, me, M4ARG (2), &start))
     return;
 
-  if (argc >= 4 && !m4_numeric_arg (context, argc, argv, 3, &length))
+  if (argc >= 4 && !m4_numeric_arg (context, me, M4ARG (3), &length))
     return;
 
   if (start < 0 || length <= 0 || start >= avail)
@@ -956,7 +959,7 @@ M4BUILTIN_HANDLER (substr)
 
   if (start + length > avail)
     length = avail - start;
-  obstack_grow (obs, M4ARG (1) + start, length);
+  obstack_grow (obs, str + start, length);
 }
 
 
diff --git a/modules/stdlib.c b/modules/stdlib.c
index 471ae17..62fdae7 100644
--- a/modules/stdlib.c
+++ b/modules/stdlib.c
@@ -110,7 +110,7 @@ M4BUILTIN_HANDLER (setenv)
   int overwrite = 1;
 
   if (argc >= 4)
-    if (!m4_numeric_arg (context, argc, argv, 3, &overwrite))
+    if (!m4_numeric_arg (context, M4ARG (0), M4ARG (3), &overwrite))
       return;
 
 #if HAVE_SETENV
@@ -209,7 +209,7 @@ M4BUILTIN_HANDLER (getpwuid)
   struct passwd *pw;
   int uid;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &uid))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &uid))
     return;
 
   pw = getpwuid (uid);
@@ -264,7 +264,7 @@ M4BUILTIN_HANDLER (srand)
     seed = time (0L) * getpid ();
   else
     {
-      if (!m4_numeric_arg (context, argc, argv, 1, &seed))
+      if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &seed))
        return;
     }
 
diff --git a/modules/time.c b/modules/time.c
index 62cff92..9807ae0 100644
--- a/modules/time.c
+++ b/modules/time.c
@@ -107,7 +107,7 @@ M4BUILTIN_HANDLER (ctime)
 
   if (argc == 2)
     {
-      m4_numeric_arg (context, argc, argv, 1, &i);
+      m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i);
       t = i;
     }
   else
@@ -155,7 +155,7 @@ M4BUILTIN_HANDLER (gmtime)
   time_t t;
   int i;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &i))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
     return;
 
   t = i;
@@ -170,7 +170,7 @@ M4BUILTIN_HANDLER (localtime)
   time_t t;
   int i;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &i))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
     return;
 
   t = i;
@@ -183,22 +183,23 @@ M4BUILTIN_HANDLER (localtime)
  **/
 M4BUILTIN_HANDLER (mktime)
 {
+  const char *me = M4ARG (0);
   struct tm tm;
   time_t t;
 
-  if (!m4_numeric_arg (context, argc, argv, 1, &tm.tm_sec))
+  if (!m4_numeric_arg (context, me, M4ARG (1), &tm.tm_sec))
     return;
-  if (!m4_numeric_arg (context, argc, argv, 2, &tm.tm_min))
+  if (!m4_numeric_arg (context, me, M4ARG (2), &tm.tm_min))
     return;
-  if (!m4_numeric_arg (context, argc, argv, 3, &tm.tm_hour))
+  if (!m4_numeric_arg (context, me, M4ARG (3), &tm.tm_hour))
     return;
-  if (!m4_numeric_arg (context, argc, argv, 4, &tm.tm_mday))
+  if (!m4_numeric_arg (context, me, M4ARG (4), &tm.tm_mday))
     return;
-  if (!m4_numeric_arg (context, argc, argv, 5, &tm.tm_mon))
+  if (!m4_numeric_arg (context, me, M4ARG (5), &tm.tm_mon))
     return;
-  if (!m4_numeric_arg (context, argc, argv, 6, &tm.tm_year))
+  if (!m4_numeric_arg (context, me, M4ARG (6), &tm.tm_year))
     return;
-  if (M4ARG (7) && !m4_numeric_arg (context, argc, argv, 7, &tm.tm_isdst))
+  if (M4ARG (7) && !m4_numeric_arg (context, me, M4ARG (7), &tm.tm_isdst))
     return;
 
   t = mktime (&tm);
@@ -218,7 +219,7 @@ M4BUILTIN_HANDLER (strftime)
   char *buf;
   int l;
 
-  if (!m4_numeric_arg (context, argc, argv, 2, &l))
+  if (!m4_numeric_arg (context, M4ARG (0), M4ARG (2), &l))
     return;
 
   t = l;
-- 
1.5.3.5


reply via email to

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