* m4/m4module.h (M4ARGLEN): New macro.
* m4/macro.c (process_macro): Adjust all callers.
* m4/utility.c (m4_dump_args): Likewise.
* modules/m4.c (divert, maketemp, mkstemp, m4wrap, len, index)
(substr): Likewise.
* modules/gnu.c (builtin, indir, mkdtemp, patsubst, regexp)
(renamesyms): Likewise.
* modules/stdlib.c (setenv): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
index 67ce53305b509a721e9679c4b40181b2c66bffd0..25c408e95f8e93f23629d0e5194d2b509a2d6bfd 100644 (file)
2008年01月26日 Eric Blake <ebb9@byu.net>
- Stage 12b: add m4_string_pair.
- Make passing quote delimiters around more efficient.
+ Stage 12c: add macro for m4_arg_len.
+ Make a common action easier to type.
Memory impact: none.
- Speed impact: slight penalty, due to more bookkeeping.
- * m4/m4module.h (m4_string_pair): New type.
- (m4_get_syntax_quotes, m4_get_syntax_comments): New prototypes.
- (m4_symbol_value_print, m4_symbol_print, m4_shipout_string_trunc):
- Alter signature.
- * m4/m4private.h (struct m4_string): Delete.
- (struct m4_syntax_table): Combine quote and comment members.
- (m4_get_syntax_lquote, m4_get_syntax_rquote, m4_get_syntax_bcomm)
- (m4_get_syntax_ecomm): Adjust accessors.
- (m4_get_syntax_quotes, m4_get_syntax_comments): New fast
- accessors.
- * m4/symtab.c (m4_symbol_value_print, m4_symbol_print):
- Alter signatures.
- * m4/input.c (string_print, composite_print, m4_input_print):
- All callers updated.
- * m4/syntax.c (m4_syntax_delete, m4_set_syntax)
- (check_is_single_quotes, m4_set_quotes, set_quote_age)
- (m4_get_syntax_lquote, m4_get_syntax_rquote)
- (m4_get_syntax_quotes, check_is_single_comments, m4_set_comment)
- (m4_get_syntax_bcomm, m4_get_syntax_ecomm)
- (m4_get_syntax_comments): Likewise.
- * m4/macro.c (trace_prepre, trace_pre, m4_push_args): Likewise.
- * m4/output.c (m4_shipout_string, m4_shipout_string_trunc):
- Likewise.
- * modules/m4.c (dumpdef, m4_make_temp): Likewise.
- * src/freeze.c (produce_frozen_state): Likewise.
- * tests/freeze.at (reloading unknown builtin): Update test.
+ Speed impact: none.
+ * m4/m4module.h (M4ARGLEN): New macro.
+ * m4/macro.c (process_macro): Adjust all callers.
+ * m4/utility.c (m4_dump_args): Likewise.
+ * modules/m4.c (divert, maketemp, mkstemp, m4wrap, len, index)
+ (substr): Likewise.
+ * modules/gnu.c (builtin, indir, mkdtemp, patsubst, regexp)
+ (renamesyms): Likewise.
+ * modules/stdlib.c (setenv): Likewise.
+
+ Stage 12b: add m4_string_pair.
+ Make passing quote delimiters around more efficient.
+ Memory impact: none.
+ Speed impact: slight penalty, due to more bookkeeping.
+ * m4/m4module.h (m4_string_pair): New type.
+ (m4_get_syntax_quotes, m4_get_syntax_comments): New prototypes.
+ (m4_symbol_value_print, m4_symbol_print, m4_shipout_string_trunc):
+ Alter signature.
+ * m4/m4private.h (struct m4_string): Delete.
+ (struct m4_syntax_table): Combine quote and comment members.
+ (m4_get_syntax_lquote, m4_get_syntax_rquote, m4_get_syntax_bcomm)
+ (m4_get_syntax_ecomm): Adjust accessors.
+ (m4_get_syntax_quotes, m4_get_syntax_comments): New fast
+ accessors.
+ * m4/symtab.c (m4_symbol_value_print, m4_symbol_print):
+ Alter signatures.
+ * m4/input.c (string_print, composite_print, m4_input_print):
+ All callers updated.
+ * m4/syntax.c (m4_syntax_delete, m4_set_syntax)
+ (check_is_single_quotes, m4_set_quotes, set_quote_age)
+ (m4_get_syntax_lquote, m4_get_syntax_rquote)
+ (m4_get_syntax_quotes, check_is_single_comments, m4_set_comment)
+ (m4_get_syntax_bcomm, m4_get_syntax_ecomm)
+ (m4_get_syntax_comments): Likewise.
+ * m4/macro.c (trace_prepre, trace_pre, m4_push_args): Likewise.
+ * m4/output.c (m4_shipout_string, m4_shipout_string_trunc):
+ Likewise.
+ * modules/m4.c (dumpdef, m4_make_temp): Likewise.
+ * src/freeze.c (produce_frozen_state): Likewise.
+ * tests/freeze.at (reloading unknown builtin): Update test.
Stage 12a: make m4_symbol_chain a union.
Shrink size of symbol chains by using a union.
index eac4c2972dc69f67af1e0e8817aea1e679df1e57..24d6a45682fcfd457f5f30b4b81e7c2a7abb3036 100644 (file)
in scope. */
#define M4ARG(i) m4_arg_text (context, argv, i)
+/* Grab the length of the text contents of argument I, or abort if the
+ argument is not text. Assumes that `m4_macro_args *argv' is in
+ scope. */
+#define M4ARGLEN(i) m4_arg_len (argv, i)
+
extern bool m4_bad_argc (m4 *, int, const char *,
unsigned int, unsigned int, bool);
extern bool m4_numeric_arg (m4 *, const char *, const char *, int *);
index 4753984eee3de1785fdb3a728523e4949abb2edf..88ee3913c8afa577d204d70bb6136e33f8661acc 100644 (file)
@@ -763,8 +763,8 @@ process_macro (m4 *context, m4_symbol_value *value, m4_obstack *obs,
{
i = SYMBOL_ARG_INDEX (*arg);
assert (i < argc);
- m4_shipout_string (context, obs, M4ARG (i),
- m4_arg_len (argv, i), false);
+ m4_shipout_string (context, obs, M4ARG (i), M4ARGLEN (i),
+ false);
}
}
else
index b3677170aa7c318d60f10c0bcccdbd147a7d165d..d95e44e953ddcc54916be17e7277624bf5e25f12 100644 (file)
/* GNU m4 -- A simple macro processor
Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1998, 1999, 2003,
- 2006, 2007 Free Software Foundation, Inc.
+ 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU M4.
@@ -114,8 +114,7 @@ m4_dump_args (m4 *context, m4_obstack *obs, unsigned int start,
else
need_sep = true;
- m4_shipout_string (context, obs, M4ARG (i), m4_arg_len (argv, i),
- quoted);
+ m4_shipout_string (context, obs, M4ARG (i), M4ARGLEN (i), quoted);
}
}
index 91cfb54c57e23817382bc1c52af485cdf3fe212f..841e6602502385792ab600cdbc9583f76376d4a8 100644 (file)
/* GNU m4 -- A simple macro processor
- Copyright (C) 2000, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2004, 2005, 2006, 2007, 2008 Free Software
+ Foundation, Inc.
This file is part of GNU M4.
{
m4_macro_args *new_argv;
bool flatten = (bp->flags & M4_BUILTIN_GROKS_MACRO) == 0;
- new_argv = m4_make_argv_ref (context, argv, name,
- m4_arg_len (argv, 1),
+ new_argv = m4_make_argv_ref (context, argv, name, M4ARGLEN (1),
true, flatten);
bp->func (context, obs, argc - 1, new_argv);
}
{
m4_macro_args *new_argv;
bool flatten = !m4_symbol_groks_macro (symbol);
- new_argv = m4_make_argv_ref (context, argv, name,
- m4_arg_len (argv, 1), true, flatten);
+ new_argv = m4_make_argv_ref (context, argv, name, M4ARGLEN (1),
+ true, flatten);
m4_macro_call (context, m4_get_symbol_value (symbol), obs,
argc - 1, new_argv);
}
M4_MODULE_IMPORT (m4, m4_make_temp);
if (m4_make_temp)
- m4_make_temp (context, obs, M4ARG (0), M4ARG (1), m4_arg_len (argv, 1),
- true);
+ m4_make_temp (context, obs, M4ARG (0), M4ARG (1), M4ARGLEN (1), true);
else
assert (!"Unable to import from m4 module");
}
return;
}
- buf = regexp_compile (context, me, pattern, m4_arg_len (argv, 2), resyntax);
+ buf = regexp_compile (context, me, pattern, M4ARGLEN (2), resyntax);
if (!buf)
return;
- regexp_substitute (context, obs, me, M4ARG (1), m4_arg_len (argv, 1),
+ regexp_substitute (context, obs, me, M4ARG (1), M4ARGLEN (1),
pattern, buf, replace, false);
}
return;
}
- buf = regexp_compile (context, me, pattern, m4_arg_len (argv, 2), resyntax);
+ buf = regexp_compile (context, me, pattern, M4ARGLEN (2), resyntax);
if (!buf)
return;
victim = M4ARG (1);
- len = m4_arg_len (argv, 1);
+ len = M4ARGLEN (1);
startpos = regexp_search (buf, victim, len, 0, len, replace == NULL);
if (startpos == -2)
return;
}
- buf = regexp_compile (context, me, regexp, m4_arg_len (argv, 1),
- resyntax);
+ buf = regexp_compile (context, me, regexp, M4ARGLEN (1), resyntax);
if (!buf)
return;
index 42dd661b7e2633e15c507dbd7c1e022bd9ebbce2..cd4c230face2e8056b844c33cf68a32984bb53b3 100644 (file)
if (argc >= 2 && !m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
return;
m4_make_diversion (context, i);
- m4_divert_text (context, NULL, M4ARG (2), m4_arg_len (argv, 2),
+ m4_divert_text (context, NULL, M4ARG (2), M4ARGLEN (2),
m4_get_current_line (context));
}
maketemp(XXXXXXXX) -> `X00nnnnn', where nnnnn is 16-bit pid
*/
const char *str = M4ARG (1);
- size_t len = m4_arg_len (argv, 1);
- int i;
- int len2;
+ size_t len = M4ARGLEN (1);
+ size_t i;
+ size_t len2;
for (i = len; i > 1; i--)
if (str[i - 1] != 'X')
}
}
else
- m4_make_temp (context, obs, M4ARG (0), M4ARG (1), m4_arg_len (argv, 1),
- false);
+ m4_make_temp (context, obs, M4ARG (0), 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), m4_arg_len (argv, 1),
- false);
+ m4_make_temp (context, obs, M4ARG (0), M4ARG (1), M4ARGLEN (1), false);
}
/* Print all arguments on standard error. */
{
assert (obstack_object_size (obs) == 0);
if (m4_get_posixly_correct_opt (context))
- m4_shipout_string (context, obs, M4ARG (1), m4_arg_len (argv, 1), false);
+ m4_shipout_string (context, obs, M4ARG (1), M4ARGLEN (1), false);
else
m4_dump_args (context, obs, 1, argv, " ", false);
obstack_1grow (obs, '0円');
/* Expand to the length of the first argument. */
M4BUILTIN_HANDLER (len)
{
- m4_shipout_int (obs, m4_arg_len (argv, 1));
+ m4_shipout_int (obs, M4ARGLEN (1));
}
/* The macro expands to the first index of the second argument in the first
/* Rely on the optimizations guaranteed by gnulib's memmem
module. */
- result = (char *) memmem (haystack, m4_arg_len (argv, 1),
- needle, m4_arg_len (argv, 2));
+ result = (char *) memmem (haystack, M4ARGLEN (1), needle, M4ARGLEN (2));
if (result)
retval = result - haystack;
return;
}
- length = avail = m4_arg_len (argv, 1);
+ length = avail = M4ARGLEN (1);
if (!m4_numeric_arg (context, me, M4ARG (2), &start))
return;
index 0063ed8c04c8d5f22a8b6833bacbe9425e0c4345..0849d3d163c4a906d5955449bcb20192718d5357 100644 (file)
/* GNU m4 -- A simple macro processor
- Copyright (C) 1999, 2000, 2001, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2006, 2007, 2008 Free Software
+ Foundation, Inc.
This file is part of GNU M4.
return;
assert (obstack_object_size (obs) == 0);
- obstack_grow (obs, M4ARG (1), m4_arg_len (argv, 1));
+ obstack_grow (obs, M4ARG (1), M4ARGLEN (1));
obstack_1grow (obs, '=');
- obstack_grow0 (obs, M4ARG (2), m4_arg_len (argv, 2));
+ obstack_grow0 (obs, M4ARG (2), M4ARGLEN (2));
{
- char *env = obstack_finish (obs);
+ char *env = (char *) obstack_finish (obs);
putenv (env);
}
#endif /* HAVE_PUTENV */