m4-patches
[Top][All Lists]
Advanced

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

35-fyi-m4warn.patch


From: Akim Demaille
Subject: 35-fyi-m4warn.patch
Date: Wed, 05 Sep 2001 09:16:27 +0200

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        Rationalize warnings, reporting the macro name as if it were a
        program name, and assertions.

        * m4/m4module.h (m4_lookup_symbol): Prototype, it is still used.
        (M4WARN): New.
        * m4/symtab.c (m4_lookup_symbol, m4_symbol_popdef)
        (m4_symbol_delete):
        Use assert for internal errors.
        * m4/utility.c (m4_bad_argc, m4_numeric_arg, m4_dump_symbols): Use
        M4WARN.
        * modules/m4.c (undefine, defn, traceon, traceoff, dumpdef): use
        M4WARN and assert.
        * tests/builtins.at (pushpop): Adjust.

Index: m4/m4module.h
--- m4/m4module.h Tue, 04 Sep 2001 11:03:34 +0200 akim
+++ m4/m4module.h Tue, 04 Sep 2001 11:56:02 +0200 akim
@@ -104,6 +104,7 @@
 extern m4_hash *m4_symtab;

 extern void      m4_symtab_init                (void);
+extern m4_symbol *m4_lookup_symbol     (const char *, m4_symbol_lookup_t);
 extern m4_symbol *m4_symbol_lookup     (const char *);
 extern m4_symbol *m4_symbol_pushdef    (const char *);
 extern m4_symbol *m4_symbol_insert     (const char *);
@@ -164,6 +165,13 @@

 /* Error handling.  */
 #define M4ERROR(Arglist) (error Arglist)
+#define M4WARN(Arglist) \
+  do                                                           \
+    {                                                          \
+       if (!suppress_warnings)                                  \
+         M4ERROR (Arglist);                                    \
+    }                                                          \
+  while (0)

 /* The name this program was run with. */
 const char *program_name;
Index: m4/symtab.c
--- m4/symtab.c Tue, 04 Sep 2001 11:08:21 +0200 akim
+++ m4/symtab.c Tue, 04 Sep 2001 11:09:25 +0200 akim
@@ -156,10 +156,7 @@
       return 0;
     }

-  M4ERROR ((warning_status, 0,
-           _("INTERNAL ERROR: Illegal mode to m4_symbol_lookup (%s, %d)"),
-           name, mode));
-  abort ();
+  assert (0);
   /*NOTREACHED*/
   return 0;
 }
@@ -224,9 +221,7 @@
 {
   m4_symbol **psymbol = (m4_symbol **) m4_hash_lookup (m4_symtab, name);

-  if (!psymbol)
-    M4ERROR ((warning_status, 0,
-             "INTERNAL ERROR: m4_symbol_popdef (%s)", name));
+  assert (psymbol);

   if (M4_SYMBOL_DATA_NEXT (*psymbol))
     m4_symbol_pop (*psymbol);
@@ -244,15 +239,9 @@
 {
   m4_symbol **psymbol = (m4_symbol **) m4_hash_lookup (m4_symtab, name);

-  if (!psymbol)
-    M4ERROR ((warning_status, 0,
-             "INTERNAL ERROR: m4_symbol_delete (%s)", name));
-
-  if (psymbol)
-    {
-      xfree (m4_hash_remove (m4_symtab, name));
-      m4_symbol_del (*psymbol);
-    }
+  assert (psymbol);
+  xfree (m4_hash_remove (m4_symtab, name));
+  m4_symbol_del (*psymbol);
 }


Index: m4/utility.c
--- m4/utility.c Tue, 04 Sep 2001 11:03:34 +0200 akim
+++ m4/utility.c Tue, 04 Sep 2001 12:21:58 +0200 akim
@@ -112,22 +112,24 @@
 boolean
 m4_bad_argc (m4_token_data *name, int argc, int min, int max)
 {
-  boolean isbad = FALSE;
-
   if (min > 0 && argc < min)
     {
-      if (!suppress_warnings)
-       M4ERROR ((warning_status, 0,
-                 _("Warning: Too few arguments to builtin `%s'"),
-                 M4_TOKEN_DATA_TEXT (name)));
-      isbad = TRUE;
-    }
-  else if (max > 0 && argc > max && !suppress_warnings)
-    M4ERROR ((warning_status, 0,
-             _("Warning: Excess arguments to builtin `%s' ignored"),
-             M4_TOKEN_DATA_TEXT (name)));
+      M4WARN ((warning_status, 0,
+              _("Warning: %s: too few arguments"),
+              M4_TOKEN_DATA_TEXT (name)));
+      return TRUE;
+    }
+
+  if (max > 0 && argc > max)
+    {
+      M4WARN ((warning_status, 0,
+              _("Warning: %s: too many arguments (ignored)"),
+              M4_TOKEN_DATA_TEXT (name)));
+      /* Return FALSE, otherwise it is not exactly `ignored'. */
+      return FALSE;
+    }

-  return isbad;
+  return FALSE;
 }

 const char *
@@ -149,9 +151,9 @@
   if (*arg == 0 || (*valuep = strtol (m4_skip_space (arg), &endp, 10),
                    *m4_skip_space (endp) != 0))
     {
-      M4ERROR ((warning_status, 0,
-               _("Non-numeric argument to `%s': %s"),
-               M4_TOKEN_DATA_TEXT (macro), arg));
+      M4WARN ((warning_status, 0,
+              _("Warning: %s: non-numeric argument: %s"),
+              M4_TOKEN_DATA_TEXT (macro), arg));
       return FALSE;
     }
   return TRUE;
@@ -267,8 +269,9 @@
          if (symbol != NULL && M4_SYMBOL_TYPE (symbol) != M4_TOKEN_VOID)
            m4_dump_symbol (M4_TOKEN_DATA_TEXT (argv[i]), symbol, data);
          else if (complain)
-           M4ERROR ((warning_status, 0,
-                     _("Undefined name %s"), M4_TOKEN_DATA_TEXT (argv[i])));
+           M4WARN ((warning_status, 0,
+                    _("Warning: %s: undefined name: %s"),
+                    M4ARG (0), M4ARG (i)));
        }
     }

Index: modules/m4.c
--- modules/m4.c Tue, 04 Sep 2001 10:45:00 +0200 akim
+++ modules/m4.c Tue, 04 Sep 2001 12:22:35 +0200 akim
@@ -186,7 +186,12 @@
 {
   if (m4_bad_argc (argv[0], argc, 2, 2))
     return;
-  m4_lookup_symbol (M4ARG (1), M4_SYMBOL_DELETE);
+
+  if (!m4_symbol_lookup (M4ARG (1)))
+    M4WARN ((warning_status, 0,
+            _("Warning: %s: undefined name: %s"), M4ARG (0), M4ARG (1)));
+  else
+    m4_symbol_delete (M4ARG (1));
 }

 M4BUILTIN_HANDLER (pushdef)
@@ -198,7 +203,11 @@
 {
   if (m4_bad_argc (argv[0], argc, 2, 2))
     return;
-  m4_lookup_symbol (M4ARG (1), M4_SYMBOL_POPDEF);
+  if (!m4_symbol_lookup (M4ARG (1)))
+    M4WARN ((warning_status, 0,
+            _("Warning: %s: undefined name: %s"), M4ARG (0), M4ARG (1)));
+  else
+    m4_symbol_popdef (M4ARG (1));
 }

 
@@ -282,6 +291,9 @@
       m4_symbol *symbol = m4_symbol_lookup (data.base[0]);

       fprintf (stderr, "%s:\t", data.base[0]);
+      assert (M4_SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT
+             || M4_SYMBOL_TYPE (symbol) == M4_TOKEN_FUNC
+             || M4_SYMBOL_TYPE (symbol) == M4_TOKEN_VOID);
       switch (M4_SYMBOL_TYPE (symbol))
        {
        case M4_TOKEN_TEXT:
@@ -294,19 +306,12 @@

        case M4_TOKEN_FUNC:
          bp = m4_builtin_find_by_func (NULL, M4_SYMBOL_FUNC (symbol));
-         if (bp == NULL)
-           {
-             M4ERROR ((warning_status, 0,
-                       _("Undefined name `%s'"), data.base[0]));
-             abort ();
-           }
+         assert (bp);
          fprintf (stderr, "<%s>\n", bp->name);
          break;

-       default:
-         M4ERROR ((warning_status, 0, _("\
-INTERNAL ERROR: Bad token data type in m4_dumpdef ()")));
-         abort ();
+       case M4_TOKEN_VOID:
+         assert (!"VOID token in m4_dumpdef");
          break;
        }
     }
@@ -324,27 +329,29 @@

   symbol = m4_symbol_lookup (M4ARG (1));
   if (symbol == NULL)
-    return;
+    {
+      M4WARN ((warning_status, 0,
+              _("Warning: %s: undefined name: %s"), M4ARG (0), M4ARG (1)));
+      return;
+    }

   switch (M4_SYMBOL_TYPE (symbol))
     {
     case M4_TOKEN_TEXT:
       m4_shipout_string(obs, M4_SYMBOL_TEXT (symbol), 0, TRUE);
-      break;
+      return;

     case M4_TOKEN_FUNC:
       m4_push_macro (M4_SYMBOL_FUNC (symbol), M4_SYMBOL_HANDLE (symbol),
                     M4_SYMBOL_TRACED (symbol));
-      break;
+      return;

     case M4_TOKEN_VOID:
-      break;
-
-    default:
-      M4ERROR ((warning_status, 0,
-               _("INTERNAL ERROR: Bad symbol type in m4_defn ()")));
-      abort ();
+      assert (!"VOID token in m4_dumpdef");
+      return;
     }
+
+  assert (!"Bad token data type in m4_defn");
 }

 
@@ -628,12 +635,13 @@
   else
     for (i = 1; i < argc; i++)
       {
-       const char *name = M4_TOKEN_DATA_TEXT (argv[i]);
+       const char *name = M4ARG (i);
        m4_symbol *symbol = m4_symbol_lookup (name);
        if (symbol != NULL)
          set_trace (name, symbol, (char *) obs);
        else
-         M4ERROR ((warning_status, 0, _("Undefined name %s"), name));
+         M4WARN ((warning_status, 0,
+                  _("Warning: %s: undefined name: %s"), M4ARG (0), name));
       }
 }

@@ -647,12 +655,13 @@
   else
     for (i = 1; i < argc; i++)
       {
-       const char *name = M4_TOKEN_DATA_TEXT (argv[i]);
+       const char *name = M4ARG (i);
        m4_symbol *symbol = m4_symbol_lookup (name);
        if (symbol != NULL)
          set_trace (name, symbol, NULL);
        else
-         M4ERROR ((warning_status, 0, _("Undefined name %s"), name));
+         M4WARN ((warning_status, 0,
+                  _("Warning: %s: undefined name: %s"), M4ARG (0), name));
       }
 }

Index: tests/builtins.at
--- tests/builtins.at Mon, 03 Sep 2001 15:40:52 +0200 akim
+++ tests/builtins.at Tue, 04 Sep 2001 12:27:49 +0200 akim
@@ -480,13 +480,9 @@ OBS: GNUs OBS: not OBS: Unix.
 dumpdef(`hej')
 popdef(`hej')
 dumpdef(`hej')
-popdef(`hej')
-dumpdef(`hej')
-popdef(`hej')

 dumpdef(`mac2')
 popdef(`mac2')
-dumpdef(`mac2')
 ]])

 AT_CHECK_M4([pushpop.m4], 0, [],
@@ -497,10 +493,9 @@ hej:       `def 4.'
 hej:   `def 3.'
 hej:   `def 2.'
 hej:   `def 1.'
-m4: pushpop.m4: 18: Undefined name hej
-m4: pushpop.m4: 20: Undefined name hej
-m4: pushpop.m4: 23: Undefined name mac2
-m4: pushpop.m4: 25: Undefined name mac2
+m4: pushpop.m4: 18: Warning: dumpdef: undefined name: hej
+m4: pushpop.m4: 20: Warning: dumpdef: undefined name: mac2
+m4: pushpop.m4: 21: Warning: popdef: undefined name: mac2
 ]])

 AT_CLEANUP



reply via email to

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