[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 35-fyi-m4warn.patch,
Akim Demaille <=