summaryrefslogtreecommitdiff
path: root/modules/m4.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2008-05-21 06:59:01 -0600
committerEric Blake <ebb9@byu.net>2008-06-02 06:55:00 -0600
commit3e33a6b3b9b2529939136c34b1e88bd3ee87a172 (patch)
treef3b5122ba6b37a4265d2ddfcf3e8ecac7e347afc /modules/m4.c
parentc41ad82fe554e33048e1ef60c4600e602c7207e9 (diff)
downloadm4-3e33a6b3b9b2529939136c34b1e88bd3ee87a172.tar.gz
Stage 24a: Use full call context in error reporting.
* m4/m4module.h (m4_error, m4_warn): Change parameter type. (m4_error_at_line, m4_warn_at_line): Delete. (m4_debug_set_output, m4_skip_line, m4_bad_argc, m4_numeric_arg) (m4_parse_truth_arg, m4_symbol_value_lookup): Adjust all clients. * m4/m4private.h (m4__next_token): Likewise. * m4/utility.c (m4_verror_at_line): Alter parameter, and use caller's location if caller is provided. (m4_error, m4_warn): Change parameter type. (m4_error_at_line, m4_warn_at_line): Delete. (m4_bad_argc, m4_numeric_arg, m4_parse_truth_arg) (m4_symbol_value_lookup): Adjust all callers. * m4/debug.c (set_debug_file, m4_debug_set_output): Likewise. * m4/input.c (m4_skip_line, m4__next_token): Likewise. * m4/macro.c (expand_argument, collect_arguments, m4_macro_call) (process_macro): Likewise. * modules/m4.h (m4_make_temp_func): Likewise. * modules/evalparse.c (m4_evaluate): Likewise. * modules/format.c (arg_int, arg_long, arg_double, format): Likewise. * modules/gnu.c (builtin, changeresyntax, changesyntax, debugfile) (debuglen, debugmode, esyscmd, indir, mkdtemp, patsubst, regexp) (renamesyms, syncoutput, regexp_compile, substitute) (regexp_substitute, m4_resyntax_encode_safe): Likewise. * modules/m4.c (define, undefine, pushdef, popdef, ifdef, ifelse) (m4_dump_symbols, defn, syscmd, incr, decr, divert, undivert, dnl) (include, maketemp, mkstemp, m4exit, traceon, traceoff, substr): Likewise. * modules/stdlib.c (setenv, getpwuid, srand): Likewise. * modules/time.c (ctime, gmtime, localtime, mktime, strftime): Likewise. * tests/options.at (--syncoutput): Add test for invalid command-line argument. Split xfailed portion... (--syncoutput and diversions): ...into new test. (unknown option): New test. * tests/freeze.at (reloading unknown builtin): Update expected output. Signed-off-by: Eric Blake <ebb9@byu.net>
Diffstat (limited to 'modules/m4.c')
-rw-r--r--modules/m4.c89
1 files changed, 46 insertions, 43 deletions
diff --git a/modules/m4.c b/modules/m4.c
index 5cb6d114..bc93ee0f 100644
--- a/modules/m4.c
+++ b/modules/m4.c
@@ -47,13 +47,13 @@
#define m4_expand_ranges m4_LTX_m4_expand_ranges
#define m4_make_temp m4_LTX_m4_make_temp
-extern void m4_set_sysval (int value);
-extern void m4_sysval_flush (m4 *context, bool report);
-extern void m4_dump_symbols (m4 *context, m4_dump_symbol_data *data,
- size_t argc, m4_macro_args *argv, bool complain);
-extern const char *m4_expand_ranges (const char *s, m4_obstack *obs);
-extern void m4_make_temp (m4 *context, m4_obstack *obs, const char *macro,
- const char *name, size_t len, bool dir);
+extern void m4_set_sysval (int);
+extern void m4_sysval_flush (m4 *, bool);
+extern void m4_dump_symbols (m4 *, m4_dump_symbol_data *, size_t,
+ m4_macro_args *, bool);
+extern const char *m4_expand_ranges (const char *, m4_obstack *);
+extern void m4_make_temp (m4 *, m4_obstack *, const m4_call_info *,
+ const char *, size_t, bool);
/* Maintain each of the builtins implemented in this modules along
with their details in a single table for easy maintenance.
@@ -153,47 +153,49 @@ M4INIT_HANDLER (m4)
M4BUILTIN_HANDLER (define)
{
+ const m4_call_info *me = m4_arg_info (argv);
+
if (m4_is_arg_text (argv, 1))
{
m4_symbol_value *value = m4_symbol_value_create ();
if (m4_symbol_value_copy (context, value, m4_arg_symbol (argv, 2)))
- m4_warn (context, 0, M4ARG (0), _("cannot concatenate builtins"));
+ m4_warn (context, 0, me, _("cannot concatenate builtins"));
m4_symbol_define (M4SYMTAB, M4ARG (1), value);
}
else
- m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+ m4_warn (context, 0, me, _("invalid macro name ignored"));
}
M4BUILTIN_HANDLER (undefine)
{
- const char *me = M4ARG (0);
size_t i;
for (i = 1; i < argc; i++)
- if (m4_symbol_value_lookup (context, me, argv, i, true))
+ if (m4_symbol_value_lookup (context, argv, i, true))
m4_symbol_delete (M4SYMTAB, M4ARG (i));
}
M4BUILTIN_HANDLER (pushdef)
{
+ const m4_call_info *me = m4_arg_info (argv);
+
if (m4_is_arg_text (argv, 1))
{
m4_symbol_value *value = m4_symbol_value_create ();
if (m4_symbol_value_copy (context, value, m4_arg_symbol (argv, 2)))
- m4_warn (context, 0, M4ARG (0), _("cannot concatenate builtins"));
+ m4_warn (context, 0, me, _("cannot concatenate builtins"));
m4_symbol_pushdef (M4SYMTAB, M4ARG (1), value);
}
else
- m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+ m4_warn (context, 0, me, _("invalid macro name ignored"));
}
M4BUILTIN_HANDLER (popdef)
{
- const char *me = M4ARG (0);
size_t i;
for (i = 1; i < argc; i++)
- if (m4_symbol_value_lookup (context, me, argv, i, true))
+ if (m4_symbol_value_lookup (context, argv, i, true))
m4_symbol_popdef (M4SYMTAB, M4ARG (i));
}
@@ -205,13 +207,12 @@ M4BUILTIN_HANDLER (popdef)
M4BUILTIN_HANDLER (ifdef)
{
m4_push_arg (context, obs, argv,
- (m4_symbol_value_lookup (context, M4ARG (0), argv, 1, false)
- ? 2 : 3));
+ m4_symbol_value_lookup (context, argv, 1, false) ? 2 : 3);
}
M4BUILTIN_HANDLER (ifelse)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
size_t i;
/* The valid ranges of argc for ifelse is discontinuous, we cannot
@@ -290,7 +291,6 @@ void
m4_dump_symbols (m4 *context, m4_dump_symbol_data *data, size_t argc,
m4_macro_args *argv, bool complain)
{
- const char *me = M4ARG (0);
assert (obstack_object_size (data->obs) == 0);
data->size = obstack_room (data->obs) / sizeof (const char *);
@@ -303,7 +303,7 @@ m4_dump_symbols (m4 *context, m4_dump_symbol_data *data, size_t argc,
for (i = 1; i < argc; i++)
{
- symbol = m4_symbol_value_lookup (context, me, argv, i, complain);
+ symbol = m4_symbol_value_lookup (context, argv, i, complain);
if (symbol)
dump_symbol_CB (NULL, M4ARG (i), symbol, data);
}
@@ -353,12 +353,12 @@ M4BUILTIN_HANDLER (dumpdef)
macro-definition token on the input stack. */
M4BUILTIN_HANDLER (defn)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
size_t i;
for (i = 1; i < argc; i++)
{
- m4_symbol *symbol = m4_symbol_value_lookup (context, me, argv, i, true);
+ m4_symbol *symbol = m4_symbol_value_lookup (context, argv, i, true);
if (!symbol)
;
@@ -368,9 +368,9 @@ M4BUILTIN_HANDLER (defn)
else if (m4_is_symbol_func (symbol))
m4_push_builtin (context, obs, m4_get_symbol_value (symbol));
else if (m4_is_symbol_placeholder (symbol))
- m4_warn (context, 0, M4ARG (i),
- _("builtin `%s' requested by frozen file not found"),
- m4_get_symbol_placeholder (symbol));
+ m4_warn (context, 0, me,
+ _("%s: builtin `%s' requested by frozen file not found"),
+ M4ARG (i), m4_get_symbol_placeholder (symbol));
else
{
assert (!"Bad token data type in m4_defn");
@@ -480,7 +480,7 @@ M4BUILTIN_HANDLER (syscmd)
{
if (m4_get_safer_opt (context))
{
- m4_error (context, 0, 0, M4ARG (0), _("disabled by --safer"));
+ m4_error (context, 0, 0, m4_arg_info (argv), _("disabled by --safer"));
return;
}
@@ -510,7 +510,7 @@ M4BUILTIN_HANDLER (incr)
{
int value;
- if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
+ if (!m4_numeric_arg (context, m4_arg_info (argv), M4ARG (1), &value))
return;
m4_shipout_int (obs, value + 1);
@@ -520,7 +520,7 @@ M4BUILTIN_HANDLER (decr)
{
int value;
- if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
+ if (!m4_numeric_arg (context, m4_arg_info (argv), M4ARG (1), &value))
return;
m4_shipout_int (obs, value - 1);
@@ -536,7 +536,8 @@ M4BUILTIN_HANDLER (divert)
{
int i = 0;
- if (argc >= 2 && !m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
+ if (argc >= 2 && !m4_numeric_arg (context, m4_arg_info (argv), M4ARG (1),
+ &i))
return;
m4_make_diversion (context, i);
m4_divert_text (context, NULL, M4ARG (2), M4ARGLEN (2),
@@ -557,7 +558,7 @@ M4BUILTIN_HANDLER (divnum)
M4BUILTIN_HANDLER (undivert)
{
size_t i = 0;
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
if (argc == 1)
m4_undivert_all (context);
@@ -596,7 +597,7 @@ M4BUILTIN_HANDLER (undivert)
lives in input.c. */
M4BUILTIN_HANDLER (dnl)
{
- m4_skip_line (context, M4ARG (0));
+ m4_skip_line (context, m4_arg_info (argv));
}
/* Shift all arguments one to the left, discarding the first argument.
@@ -641,7 +642,7 @@ include (m4 *context, int argc, m4_macro_args *argv, bool silent)
if (fp == NULL)
{
if (!silent)
- m4_error (context, 0, errno, M4ARG (0), _("cannot open `%s'"),
+ m4_error (context, 0, errno, m4_arg_info (argv), _("cannot open `%s'"),
M4ARG (1));
return;
}
@@ -667,10 +668,10 @@ M4BUILTIN_HANDLER (sinclude)
/* Add trailing `X' to PATTERN of length LEN as necessary, then
securely create the temporary file system object. If DIR, create a
- directory instead of a file. Report errors on behalf of MACRO. If
+ directory instead of a file. Report errors on behalf of CALLER. If
successful, output the quoted resulting name on OBS. */
void
-m4_make_temp (m4 *context, m4_obstack *obs, const char *macro,
+m4_make_temp (m4 *context, m4_obstack *obs, const m4_call_info *caller,
const char *pattern, size_t len, bool dir)
{
int fd;
@@ -680,7 +681,7 @@ m4_make_temp (m4 *context, m4_obstack *obs, const char *macro,
if (m4_get_safer_opt (context))
{
- m4_error (context, 0, 0, macro, _("disabled by --safer"));
+ m4_error (context, 0, 0, caller, _("disabled by --safer"));
return;
}
@@ -704,7 +705,7 @@ m4_make_temp (m4 *context, m4_obstack *obs, const char *macro,
/* This use of _() will need to change if xgettext ever changes
its undocumented behavior of parsing both string options. */
- m4_error (context, 0, errno, macro,
+ m4_error (context, 0, errno, caller,
_(dir ? "cannot create directory from template `%s'"
: "cannot create file from template `%s'"),
pattern);
@@ -723,7 +724,8 @@ m4_make_temp (m4 *context, m4_obstack *obs, const char *macro,
/* Use the first argument as at template for a temporary file name. */
M4BUILTIN_HANDLER (maketemp)
{
- m4_warn (context, 0, M4ARG (0), _("recommend using mkstemp instead"));
+ const m4_call_info *me = m4_arg_info (argv);
+ m4_warn (context, 0, me, _("recommend using mkstemp instead"));
if (m4_get_posixly_correct_opt (context))
{
/* POSIX states "any trailing 'X' characters [are] replaced with
@@ -757,13 +759,14 @@ M4BUILTIN_HANDLER (maketemp)
}
}
else
- m4_make_temp (context, obs, M4ARG (0), M4ARG (1), M4ARGLEN (1), false);
+ m4_make_temp (context, obs, me, M4ARG (1), M4ARGLEN (1), false);
}
/* Use the first argument as a template for a temporary file name. */
M4BUILTIN_HANDLER (mkstemp)
{
- m4_make_temp (context, obs, M4ARG (0), M4ARG (1), M4ARGLEN (1), false);
+ m4_make_temp (context, obs, m4_arg_info (argv), M4ARG (1), M4ARGLEN (1),
+ false);
}
/* Print all arguments on standard error. */
@@ -792,7 +795,7 @@ M4BUILTIN_HANDLER (errprint)
arguments are present. */
M4BUILTIN_HANDLER (m4exit)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
int exit_code = EXIT_SUCCESS;
/* Warn on bad arguments, but still exit. */
@@ -836,7 +839,7 @@ M4BUILTIN_HANDLER (m4wrap)
M4BUILTIN_HANDLER (traceon)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
size_t i;
if (argc == 1)
@@ -853,7 +856,7 @@ M4BUILTIN_HANDLER (traceon)
/* Disable tracing of all specified macros, or all, if none is specified. */
M4BUILTIN_HANDLER (traceoff)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
size_t i;
if (argc == 1)
@@ -902,7 +905,7 @@ M4BUILTIN_HANDLER (index)
substring extends to the end of the first argument. */
M4BUILTIN_HANDLER (substr)
{
- const char *me = M4ARG (0);
+ const m4_call_info *me = m4_arg_info (argv);
const char *str = M4ARG (1);
int start = 0;
int length;