summaryrefslogtreecommitdiff
path: root/m4/macro.c
diff options
context:
space:
mode:
Diffstat (limited to 'm4/macro.c')
-rw-r--r--m4/macro.c1228
1 files changed, 614 insertions, 614 deletions
diff --git a/m4/macro.c b/m4/macro.c
index 08eaf11b..c4a82201 100644
--- a/m4/macro.c
+++ b/m4/macro.c
@@ -64,7 +64,7 @@
thresholds of the input engine, the interesting sequence of events
is as follows:
- stacks[0] refs stacks[1] refs
+ stacks[0] refs stacks[1] refs
after second dnl ends: `' 0 `' 0
expand_macro for x, level 0: `' 1 `' 0
expand_macro for a, level 1: `' 1 `' 1
@@ -121,14 +121,14 @@
*/
static m4_macro_args *collect_arguments (m4 *, m4_call_info *, m4_symbol *,
- m4_obstack *, m4_obstack *);
+ m4_obstack *, m4_obstack *);
static void expand_macro (m4 *, const char *, size_t, m4_symbol *);
static bool expand_token (m4 *, m4_obstack *, m4__token_type,
- m4_symbol_value *, int, bool);
+ m4_symbol_value *, int, bool);
static bool expand_argument (m4 *, m4_obstack *, m4_symbol_value *,
- const m4_call_info *);
+ const m4_call_info *);
static void process_macro (m4 *, m4_symbol_value *, m4_obstack *, int,
- m4_macro_args *);
+ m4_macro_args *);
static unsigned int trace_pre (m4 *, m4_macro_args *);
static void trace_post (m4 *, unsigned int, const m4_call_info *);
@@ -175,7 +175,7 @@ m4_macro_expand_input (m4 *context)
VALUE_MAX_ARGS (&empty_symbol) = -1;
while ((type = m4__next_token (context, &token, &line, NULL, false, NULL))
- != M4_TOKEN_EOF)
+ != M4_TOKEN_EOF)
expand_token (context, NULL, type, &token, line, true);
}
@@ -193,12 +193,12 @@ m4_macro_expand_input (m4 *context)
slower performance. */
static bool
expand_token (m4 *context, m4_obstack *obs, m4__token_type type,
- m4_symbol_value *token, int line, bool first)
+ m4_symbol_value *token, int line, bool first)
{
m4_symbol *symbol;
bool result = false;
const char *text = (m4_is_symbol_value_text (token)
- ? m4_get_symbol_value_text (token) : NULL);
+ ? m4_get_symbol_value_text (token) : NULL);
switch (type)
{ /* TOKSW */
@@ -209,22 +209,22 @@ expand_token (m4 *context, m4_obstack *obs, m4__token_type type,
case M4_TOKEN_STRING:
/* Strings are safe in isolation (since quote_age detects any
- change in delimiters), or when safe_quotes is true. This is
- also returned for sequences of benign characters, such as
- digits. When safe_quotes is false, we could technically
- return true if we can prove that the concatenation of this
- string to prior text does not form a multi-byte quote
- delimiter, but that is a lot of overhead, so we give the
- conservative answer of false. */
+ change in delimiters), or when safe_quotes is true. This is
+ also returned for sequences of benign characters, such as
+ digits. When safe_quotes is false, we could technically
+ return true if we can prove that the concatenation of this
+ string to prior text does not form a multi-byte quote
+ delimiter, but that is a lot of overhead, so we give the
+ conservative answer of false. */
result = first || m4__safe_quotes (M4SYNTAX);
/* fallthru */
case M4_TOKEN_COMMENT:
/* Comments can contain unbalanced quote delimiters. Rather
- than search for one, we return the conservative answer of
- false. If obstack is provided, the string or comment was
- already expanded into it during next_token. */
+ than search for one, we return the conservative answer of
+ false. If obstack is provided, the string or comment was
+ already expanded into it during next_token. */
if (obs)
- return result;
+ return result;
break;
case M4_TOKEN_OPEN:
@@ -232,56 +232,56 @@ expand_token (m4 *context, m4_obstack *obs, m4__token_type type,
case M4_TOKEN_CLOSE:
case M4_TOKEN_SPACE:
/* If safe_quotes is true, then these do not form a quote
- delimiter. If it is false, we give the conservative answer
- of false rather than taking time to prove that no multi-byte
- quote delimiter is formed. */
+ delimiter. If it is false, we give the conservative answer
+ of false rather than taking time to prove that no multi-byte
+ quote delimiter is formed. */
result = m4__safe_quotes (M4SYNTAX);
break;
case M4_TOKEN_SIMPLE:
/* If safe_quotes is true, then all but the single-byte end
- quote delimiter is safe in a quoted context; a single-byte
- start delimiter will trigger M4_TOKEN_STRING instead. If
- safe_quotes is false, we give the conservative answer of
- false rather than taking time to prove that no multi-byte
- quote delimiter is formed. */
+ quote delimiter is safe in a quoted context; a single-byte
+ start delimiter will trigger M4_TOKEN_STRING instead. If
+ safe_quotes is false, we give the conservative answer of
+ false rather than taking time to prove that no multi-byte
+ quote delimiter is formed. */
result = (!m4_has_syntax (M4SYNTAX, *text, M4_SYNTAX_RQUOTE)
- && m4__safe_quotes (M4SYNTAX));
+ && m4__safe_quotes (M4SYNTAX));
if (result)
- assert (!m4_has_syntax (M4SYNTAX, *text, M4_SYNTAX_LQUOTE));
+ assert (!m4_has_syntax (M4SYNTAX, *text, M4_SYNTAX_LQUOTE));
break;
case M4_TOKEN_WORD:
{
- const char *textp = text;
- size_t len = m4_get_symbol_value_len (token);
- size_t len2 = len;
-
- if (m4_has_syntax (M4SYNTAX, *textp, M4_SYNTAX_ESCAPE))
- {
- textp++;
- len2--;
- }
-
- symbol = m4_symbol_lookup (M4SYMTAB, textp, len2);
- assert (!symbol || !m4_is_symbol_void (symbol));
- if (symbol == NULL
- || (symbol->value->type == M4_SYMBOL_FUNC
- && BIT_TEST (SYMBOL_FLAGS (symbol), VALUE_BLIND_ARGS_BIT)
- && !m4__next_token_is_open (context)))
- {
- m4_divert_text (context, obs, text, len, line);
- /* If safe_quotes is true, then words do not overlap with
- quote delimiters. If it is false, we give the
- conservative answer of false rather than prove that no
- multi-byte delimiters are formed. */
- return m4__safe_quotes (M4SYNTAX);
- }
- expand_macro (context, textp, len2, symbol);
- /* Expanding a macro may create new tokens to scan, and those
- tokens may generate unsafe text, but we did not append any
- text now. */
- return true;
+ const char *textp = text;
+ size_t len = m4_get_symbol_value_len (token);
+ size_t len2 = len;
+
+ if (m4_has_syntax (M4SYNTAX, *textp, M4_SYNTAX_ESCAPE))
+ {
+ textp++;
+ len2--;
+ }
+
+ symbol = m4_symbol_lookup (M4SYMTAB, textp, len2);
+ assert (!symbol || !m4_is_symbol_void (symbol));
+ if (symbol == NULL
+ || (symbol->value->type == M4_SYMBOL_FUNC
+ && BIT_TEST (SYMBOL_FLAGS (symbol), VALUE_BLIND_ARGS_BIT)
+ && !m4__next_token_is_open (context)))
+ {
+ m4_divert_text (context, obs, text, len, line);
+ /* If safe_quotes is true, then words do not overlap with
+ quote delimiters. If it is false, we give the
+ conservative answer of false rather than prove that no
+ multi-byte delimiters are formed. */
+ return m4__safe_quotes (M4SYNTAX);
+ }
+ expand_macro (context, textp, len2, symbol);
+ /* Expanding a macro may create new tokens to scan, and those
+ tokens may generate unsafe text, but we did not append any
+ text now. */
+ return true;
}
default:
@@ -303,7 +303,7 @@ expand_token (m4 *context, m4_obstack *obs, m4__token_type type,
Report errors on behalf of CALLER. */
static bool
expand_argument (m4 *context, m4_obstack *obs, m4_symbol_value *argp,
- const m4_call_info *caller)
+ const m4_call_info *caller)
{
m4__token_type type;
m4_symbol_value token;
@@ -326,108 +326,108 @@ expand_argument (m4 *context, m4_obstack *obs, m4_symbol_value *argp,
while (1)
{
if (VALUE_MIN_ARGS (argp) < VALUE_MIN_ARGS (&token))
- VALUE_MIN_ARGS (argp) = VALUE_MIN_ARGS (&token);
+ VALUE_MIN_ARGS (argp) = VALUE_MIN_ARGS (&token);
if (VALUE_MAX_ARGS (&token) < VALUE_MAX_ARGS (argp))
- VALUE_MAX_ARGS (argp) = VALUE_MAX_ARGS (&token);
+ VALUE_MAX_ARGS (argp) = VALUE_MAX_ARGS (&token);
switch (type)
- { /* TOKSW */
- case M4_TOKEN_COMMA:
- case M4_TOKEN_CLOSE:
- if (paren_level == 0)
- {
- assert (argp->type != M4_SYMBOL_FUNC);
- if (argp->type != M4_SYMBOL_COMP)
- {
- len = obstack_object_size (obs);
- VALUE_MODULE (argp) = NULL;
- if (len)
- {
- obstack_1grow (obs, '\0');
- m4_set_symbol_value_text (argp, obstack_finish (obs),
- len, age);
- }
- else
- m4_set_symbol_value_text (argp, "", len, 0);
- }
- else
- {
- m4__make_text_link (obs, NULL, &argp->u.u_c.end);
- if (argp->u.u_c.chain == argp->u.u_c.end
- && argp->u.u_c.chain->type == M4__CHAIN_FUNC)
- {
- const m4__builtin *func = argp->u.u_c.chain->u.builtin;
- argp->type = M4_SYMBOL_FUNC;
- argp->u.builtin = func;
- }
- }
- return type == M4_TOKEN_COMMA;
- }
- /* fallthru */
- case M4_TOKEN_OPEN:
- case M4_TOKEN_SIMPLE:
- if (type == M4_TOKEN_OPEN)
- paren_level++;
- else if (type == M4_TOKEN_CLOSE)
- paren_level--;
- if (!expand_token (context, obs, type, &token, line, first))
- age = 0;
- break;
-
- case M4_TOKEN_EOF:
- m4_error (context, EXIT_FAILURE, 0, caller,
- _("end of file in argument list"));
- break;
-
- case M4_TOKEN_WORD:
- case M4_TOKEN_SPACE:
- case M4_TOKEN_STRING:
- case M4_TOKEN_COMMENT:
- case M4_TOKEN_MACDEF:
- if (!expand_token (context, obs, type, &token, line, first))
- age = 0;
- if (token.type == M4_SYMBOL_COMP)
- {
- if (argp->type != M4_SYMBOL_COMP)
- {
- argp->type = M4_SYMBOL_COMP;
- argp->u.u_c.chain = token.u.u_c.chain;
- argp->u.u_c.wrapper = argp->u.u_c.has_func = false;
- }
- else
- {
- assert (argp->u.u_c.end);
- argp->u.u_c.end->next = token.u.u_c.chain;
- }
- argp->u.u_c.end = token.u.u_c.end;
- if (token.u.u_c.has_func)
- argp->u.u_c.has_func = true;
- }
- break;
-
- case M4_TOKEN_ARGV:
- assert (paren_level == 0 && argp->type == M4_SYMBOL_VOID
- && obstack_object_size (obs) == 0
- && token.u.u_c.chain == token.u.u_c.end
- && token.u.u_c.chain->quote_age == age
- && token.u.u_c.chain->type == M4__CHAIN_ARGV);
- argp->type = M4_SYMBOL_COMP;
- argp->u.u_c.chain = argp->u.u_c.end = token.u.u_c.chain;
- argp->u.u_c.wrapper = true;
- argp->u.u_c.has_func = token.u.u_c.has_func;
- type = m4__next_token (context, &token, NULL, NULL, false, caller);
- if (argp->u.u_c.chain->u.u_a.skip_last)
- assert (type == M4_TOKEN_COMMA);
- else
- assert (type == M4_TOKEN_COMMA || type == M4_TOKEN_CLOSE);
- return type == M4_TOKEN_COMMA;
-
- default:
- assert (!"expand_argument");
- abort ();
- }
+ { /* TOKSW */
+ case M4_TOKEN_COMMA:
+ case M4_TOKEN_CLOSE:
+ if (paren_level == 0)
+ {
+ assert (argp->type != M4_SYMBOL_FUNC);
+ if (argp->type != M4_SYMBOL_COMP)
+ {
+ len = obstack_object_size (obs);
+ VALUE_MODULE (argp) = NULL;
+ if (len)
+ {
+ obstack_1grow (obs, '\0');
+ m4_set_symbol_value_text (argp, obstack_finish (obs),
+ len, age);
+ }
+ else
+ m4_set_symbol_value_text (argp, "", len, 0);
+ }
+ else
+ {
+ m4__make_text_link (obs, NULL, &argp->u.u_c.end);
+ if (argp->u.u_c.chain == argp->u.u_c.end
+ && argp->u.u_c.chain->type == M4__CHAIN_FUNC)
+ {
+ const m4__builtin *func = argp->u.u_c.chain->u.builtin;
+ argp->type = M4_SYMBOL_FUNC;
+ argp->u.builtin = func;
+ }
+ }
+ return type == M4_TOKEN_COMMA;
+ }
+ /* fallthru */
+ case M4_TOKEN_OPEN:
+ case M4_TOKEN_SIMPLE:
+ if (type == M4_TOKEN_OPEN)
+ paren_level++;
+ else if (type == M4_TOKEN_CLOSE)
+ paren_level--;
+ if (!expand_token (context, obs, type, &token, line, first))
+ age = 0;
+ break;
+
+ case M4_TOKEN_EOF:
+ m4_error (context, EXIT_FAILURE, 0, caller,
+ _("end of file in argument list"));
+ break;
+
+ case M4_TOKEN_WORD:
+ case M4_TOKEN_SPACE:
+ case M4_TOKEN_STRING:
+ case M4_TOKEN_COMMENT:
+ case M4_TOKEN_MACDEF:
+ if (!expand_token (context, obs, type, &token, line, first))
+ age = 0;
+ if (token.type == M4_SYMBOL_COMP)
+ {
+ if (argp->type != M4_SYMBOL_COMP)
+ {
+ argp->type = M4_SYMBOL_COMP;
+ argp->u.u_c.chain = token.u.u_c.chain;
+ argp->u.u_c.wrapper = argp->u.u_c.has_func = false;
+ }
+ else
+ {
+ assert (argp->u.u_c.end);
+ argp->u.u_c.end->next = token.u.u_c.chain;
+ }
+ argp->u.u_c.end = token.u.u_c.end;
+ if (token.u.u_c.has_func)
+ argp->u.u_c.has_func = true;
+ }
+ break;
+
+ case M4_TOKEN_ARGV:
+ assert (paren_level == 0 && argp->type == M4_SYMBOL_VOID
+ && obstack_object_size (obs) == 0
+ && token.u.u_c.chain == token.u.u_c.end
+ && token.u.u_c.chain->quote_age == age
+ && token.u.u_c.chain->type == M4__CHAIN_ARGV);
+ argp->type = M4_SYMBOL_COMP;
+ argp->u.u_c.chain = argp->u.u_c.end = token.u.u_c.chain;
+ argp->u.u_c.wrapper = true;
+ argp->u.u_c.has_func = token.u.u_c.has_func;
+ type = m4__next_token (context, &token, NULL, NULL, false, caller);
+ if (argp->u.u_c.chain->u.u_a.skip_last)
+ assert (type == M4_TOKEN_COMMA);
+ else
+ assert (type == M4_TOKEN_COMMA || type == M4_TOKEN_CLOSE);
+ return type == M4_TOKEN_COMMA;
+
+ default:
+ assert (!"expand_argument");
+ abort ();
+ }
if (argp->type != M4_SYMBOL_VOID || obstack_object_size (obs))
- first = false;
+ first = false;
type = m4__next_token (context, &token, NULL, obs, first, caller);
}
}
@@ -463,11 +463,11 @@ expand_macro (m4 *context, const char *name, size_t len, m4_symbol *symbol)
{
size_t count = context->stacks_count;
context->arg_stacks
- = (m4__macro_arg_stacks *) x2nrealloc (context->arg_stacks,
- &context->stacks_count,
- sizeof *context->arg_stacks);
+ = (m4__macro_arg_stacks *) x2nrealloc (context->arg_stacks,
+ &context->stacks_count,
+ sizeof *context->arg_stacks);
memset (&context->arg_stacks[count], 0,
- sizeof *context->arg_stacks * (context->stacks_count - count));
+ sizeof *context->arg_stacks * (context->stacks_count - count));
}
stack = &context->arg_stacks[level];
if (!stack->args)
@@ -481,7 +481,7 @@ expand_macro (m4 *context, const char *name, size_t len, m4_symbol *symbol)
stack->argv_base = obstack_finish (stack->argv);
}
assert (obstack_object_size (stack->args) == 0
- && obstack_object_size (stack->argv) == 0);
+ && obstack_object_size (stack->argv) == 0);
args_base = obstack_finish (stack->args);
argv_base = obstack_finish (stack->argv);
m4__adjust_refcount (context, level, true);
@@ -495,7 +495,7 @@ expand_macro (m4 *context, const char *name, size_t len, m4_symbol *symbol)
info.line = m4_get_current_line (context);
info.call_id = ++macro_call_id;
info.trace = (m4_is_debug_bit (context, M4_DEBUG_TRACE_ALL)
- || m4_get_symbol_traced (symbol));
+ || m4_get_symbol_traced (symbol));
info.debug_level = m4_get_debug_level_opt (context);
info.name = name;
info.name_len = len;
@@ -505,7 +505,7 @@ expand_macro (m4 *context, const char *name, size_t len, m4_symbol *symbol)
if (m4_get_nesting_limit_opt (context) < ++context->expansion_level)
m4_error (context, EXIT_FAILURE, 0, NULL, _("\
recursion limit of %zu exceeded, use -L<N> to change it"),
- m4_get_nesting_limit_opt (context));
+ m4_get_nesting_limit_opt (context));
m4_trace_prepare (context, &info, value);
argv = collect_arguments (context, &info, symbol, stack->args, stack->argv);
@@ -537,20 +537,20 @@ recursion limit of %zu exceeded, use -L<N> to change it"),
if (stack->refcount)
{
if (argv->inuse)
- {
- obstack_free (stack->args, args_scratch);
- if (debug_macro_level & PRINT_ARGCOUNT_CHANGES)
- xfprintf (stderr, "m4debug: -%zu- `%s' in use, level=%zu, "
- "refcount=%zu, argcount=%zu\n", info.call_id,
- argv->info->name, level, stack->refcount,
- stack->argcount);
- }
+ {
+ obstack_free (stack->args, args_scratch);
+ if (debug_macro_level & PRINT_ARGCOUNT_CHANGES)
+ xfprintf (stderr, "m4debug: -%zu- `%s' in use, level=%zu, "
+ "refcount=%zu, argcount=%zu\n", info.call_id,
+ argv->info->name, level, stack->refcount,
+ stack->argcount);
+ }
else
- {
- obstack_free (stack->args, args_base);
- obstack_free (stack->argv, argv_base);
- stack->argcount--;
- }
+ {
+ obstack_free (stack->args, args_base);
+ obstack_free (stack->argv, argv_base);
+ stack->argcount--;
+ }
}
}
@@ -560,7 +560,7 @@ recursion limit of %zu exceeded, use -L<N> to change it"),
object describing all of the macro arguments. */
static m4_macro_args *
collect_arguments (m4 *context, m4_call_info *info, m4_symbol *symbol,
- m4_obstack *arguments, m4_obstack *argv_stack)
+ m4_obstack *arguments, m4_obstack *argv_stack)
{
m4_symbol_value token;
m4_symbol_value *tokenp;
@@ -588,53 +588,53 @@ collect_arguments (m4 *context, m4_call_info *info, m4_symbol *symbol,
/* Gobble parenthesis, then collect arguments. */
m4__next_token (context, &token, NULL, NULL, false, info);
do
- {
- tokenp = (m4_symbol_value *) obstack_alloc (arguments,
- sizeof *tokenp);
- more_args = expand_argument (context, arguments, tokenp, info);
-
- if ((m4_is_symbol_value_text (tokenp)
- && !m4_get_symbol_value_len (tokenp))
- || (args.flatten && m4_is_symbol_value_func (tokenp)))
- {
- obstack_free (arguments, tokenp);
- tokenp = &empty_symbol;
- }
- obstack_ptr_grow (argv_stack, tokenp);
- args.arraylen++;
- args.argc++;
- switch (tokenp->type)
- {
- case M4_SYMBOL_TEXT:
- /* Be conservative - any change in quoting while
- collecting arguments, or any unsafe argument, will
- require a rescan if $@ is reused. */
- if (m4_get_symbol_value_len (tokenp)
- && m4_get_symbol_value_quote_age (tokenp) != args.quote_age)
- args.quote_age = 0;
- break;
- case M4_SYMBOL_FUNC:
- args.has_func = true;
- break;
- case M4_SYMBOL_COMP:
- args.has_ref = true;
- if (tokenp->u.u_c.wrapper)
- {
- assert (tokenp->u.u_c.chain->type == M4__CHAIN_ARGV
- && !tokenp->u.u_c.chain->next);
- args.argc += (tokenp->u.u_c.chain->u.u_a.argv->argc
- - tokenp->u.u_c.chain->u.u_a.index
- - tokenp->u.u_c.chain->u.u_a.skip_last - 1);
- args.wrapper = true;
- }
- if (tokenp->u.u_c.has_func)
- args.has_func = true;
- break;
- default:
- assert (!"expand_argument");
- abort ();
- }
- }
+ {
+ tokenp = (m4_symbol_value *) obstack_alloc (arguments,
+ sizeof *tokenp);
+ more_args = expand_argument (context, arguments, tokenp, info);
+
+ if ((m4_is_symbol_value_text (tokenp)
+ && !m4_get_symbol_value_len (tokenp))
+ || (args.flatten && m4_is_symbol_value_func (tokenp)))
+ {
+ obstack_free (arguments, tokenp);
+ tokenp = &empty_symbol;
+ }
+ obstack_ptr_grow (argv_stack, tokenp);
+ args.arraylen++;
+ args.argc++;
+ switch (tokenp->type)
+ {
+ case M4_SYMBOL_TEXT:
+ /* Be conservative - any change in quoting while
+ collecting arguments, or any unsafe argument, will
+ require a rescan if $@ is reused. */
+ if (m4_get_symbol_value_len (tokenp)
+ && m4_get_symbol_value_quote_age (tokenp) != args.quote_age)
+ args.quote_age = 0;
+ break;
+ case M4_SYMBOL_FUNC:
+ args.has_func = true;
+ break;
+ case M4_SYMBOL_COMP:
+ args.has_ref = true;
+ if (tokenp->u.u_c.wrapper)
+ {
+ assert (tokenp->u.u_c.chain->type == M4__CHAIN_ARGV
+ && !tokenp->u.u_c.chain->next);
+ args.argc += (tokenp->u.u_c.chain->u.u_a.argv->argc
+ - tokenp->u.u_c.chain->u.u_a.index
+ - tokenp->u.u_c.chain->u.u_a.skip_last - 1);
+ args.wrapper = true;
+ }
+ if (tokenp->u.u_c.has_func)
+ args.has_func = true;
+ break;
+ default:
+ assert (!"expand_argument");
+ abort ();
+ }
+ }
while (more_args);
}
argv = (m4_macro_args *) obstack_finish (argv_stack);
@@ -657,32 +657,32 @@ collect_arguments (m4 *context, m4_call_info *info, m4_symbol *symbol,
tracing is also handled here. */
void
m4_macro_call (m4 *context, m4_symbol_value *value, m4_obstack *expansion,
- m4_macro_args *argv)
+ m4_macro_args *argv)
{
unsigned int trace_start = 0;
if (argv->info->trace)
trace_start = trace_pre (context, argv);
if (!m4_bad_argc (context, argv->argc, argv->info,
- VALUE_MIN_ARGS (value), VALUE_MAX_ARGS (value),
- BIT_TEST (VALUE_FLAGS (value),
- VALUE_SIDE_EFFECT_ARGS_BIT)))
+ VALUE_MIN_ARGS (value), VALUE_MAX_ARGS (value),
+ BIT_TEST (VALUE_FLAGS (value),
+ VALUE_SIDE_EFFECT_ARGS_BIT)))
{
if (m4_is_symbol_value_text (value))
- process_macro (context, value, expansion, argv->argc, argv);
+ process_macro (context, value, expansion, argv->argc, argv);
else if (m4_is_symbol_value_func (value))
- m4_get_symbol_value_func (value) (context, expansion, argv->argc,
- argv);
+ m4_get_symbol_value_func (value) (context, expansion, argv->argc,
+ argv);
else if (m4_is_symbol_value_placeholder (value))
- m4_warn (context, 0, argv->info,
- _("builtin %s requested by frozen file not found"),
- quotearg_style (locale_quoting_style,
- m4_get_symbol_value_placeholder (value)));
+ m4_warn (context, 0, argv->info,
+ _("builtin %s requested by frozen file not found"),
+ quotearg_style (locale_quoting_style,
+ m4_get_symbol_value_placeholder (value)));
else
- {
- assert (!"m4_macro_call");
- abort ();
- }
+ {
+ assert (!"m4_macro_call");
+ abort ();
+ }
}
if (argv->info->trace)
trace_post (context, trace_start, argv->info);
@@ -695,7 +695,7 @@ m4_macro_call (m4 *context, m4_symbol_value *value, m4_obstack *expansion,
as usual. */
static void
process_macro (m4 *context, m4_symbol_value *value, m4_obstack *obs,
- int argc, m4_macro_args *argv)
+ int argc, m4_macro_args *argv)
{
const char *text = m4_get_symbol_value_text (value);
size_t len = m4_get_symbol_value_len (value);
@@ -705,121 +705,121 @@ process_macro (m4 *context, m4_symbol_value *value, m4_obstack *obs,
{
const char *dollar;
if (m4_is_syntax_single_dollar (M4SYNTAX))
- dollar = (char *) memchr (text, M4SYNTAX->dollar, len);
+ dollar = (char *) memchr (text, M4SYNTAX->dollar, len);
else
- {
- dollar = text;
- while (dollar != end)
- {
- if (m4_has_syntax (M4SYNTAX, *dollar, M4_SYNTAX_DOLLAR))
- break;
- dollar++;
- }
- if (dollar == end)
- dollar = NULL;
- }
+ {
+ dollar = text;
+ while (dollar != end)
+ {
+ if (m4_has_syntax (M4SYNTAX, *dollar, M4_SYNTAX_DOLLAR))
+ break;
+ dollar++;
+ }
+ if (dollar == end)
+ dollar = NULL;
+ }
if (!dollar)
- {
- obstack_grow (obs, text, len);
- return;
- }
+ {
+ obstack_grow (obs, text, len);
+ return;
+ }
obstack_grow (obs, text, dollar - text);
len -= dollar - text;
text = dollar;
if (len == 1)
- {
- obstack_1grow (obs, *dollar);
- return;
- }
+ {
+ obstack_1grow (obs, *dollar);
+ return;
+ }
len--;
switch (*++text)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- /* FIXME - multidigit arguments should convert over to ${10}
- syntax instead of $10; see
- http://lists.gnu.org/archive/html/m4-discuss/2006-08/msg00028.html
- for more discussion. */
- if (m4_get_posixly_correct_opt (context)
- || !isdigit (to_uchar (text[1])))
- {
- i = *text++ - '0';
- len--;
- }
- else
- {
- char *endp;
- i = (int) strtol (text, &endp, 10);
- len -= endp - text;
- text = endp;
- }
- if (i < argc)
- m4_push_arg (context, obs, argv, i);
- break;
-
- case '#': /* number of arguments */
- m4_shipout_int (obs, argc - 1);
- text++;
- len--;
- break;
-
- case '*': /* all arguments */
- case '@': /* ... same, but quoted */
- m4_push_args (context, obs, argv, false, *text == '@');
- text++;
- len--;
- break;
-
- default:
- if (m4_get_posixly_correct_opt (context)
- || !VALUE_ARG_SIGNATURE (value))
- {
- obstack_1grow (obs, *dollar);
- }
- else
- {
- size_t len1 = 0;
- const char *endp;
- char *key;
-
- for (endp = ++text;
- len1 < len && m4_has_syntax (M4SYNTAX, *endp,
- (M4_SYNTAX_OTHER
- | M4_SYNTAX_ALPHA
- | M4_SYNTAX_NUM));
- ++endp)
- {
- ++len1;
- }
- key = xstrndup (text, len1);
-
- if (*endp)
- {
- struct m4_symbol_arg **arg
- = (struct m4_symbol_arg **)
- m4_hash_lookup (VALUE_ARG_SIGNATURE (value), key);
-
- if (arg)
- {
- i = SYMBOL_ARG_INDEX (*arg);
- assert (i < argc);
- m4_shipout_string (context, obs, M4ARG (i), M4ARGLEN (i),
- false);
- }
- }
- else
- {
- m4_error (context, 0, 0, argv->info,
- _("unterminated parameter reference: %s"), key);
- }
-
- len -= endp - text;
- text = endp;
-
- free (key);
- }
- break;
- }
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ /* FIXME - multidigit arguments should convert over to ${10}
+ syntax instead of $10; see
+ http://lists.gnu.org/archive/html/m4-discuss/2006-08/msg00028.html
+ for more discussion. */
+ if (m4_get_posixly_correct_opt (context)
+ || !isdigit (to_uchar (text[1])))
+ {
+ i = *text++ - '0';
+ len--;
+ }
+ else
+ {
+ char *endp;
+ i = (int) strtol (text, &endp, 10);
+ len -= endp - text;
+ text = endp;
+ }
+ if (i < argc)
+ m4_push_arg (context, obs, argv, i);
+ break;
+
+ case '#': /* number of arguments */
+ m4_shipout_int (obs, argc - 1);
+ text++;
+ len--;
+ break;
+
+ case '*': /* all arguments */
+ case '@': /* ... same, but quoted */
+ m4_push_args (context, obs, argv, false, *text == '@');
+ text++;
+ len--;
+ break;
+
+ default:
+ if (m4_get_posixly_correct_opt (context)
+ || !VALUE_ARG_SIGNATURE (value))
+ {
+ obstack_1grow (obs, *dollar);
+ }
+ else
+ {
+ size_t len1 = 0;
+ const char *endp;
+ char *key;
+
+ for (endp = ++text;
+ len1 < len && m4_has_syntax (M4SYNTAX, *endp,
+ (M4_SYNTAX_OTHER
+ | M4_SYNTAX_ALPHA
+ | M4_SYNTAX_NUM));
+ ++endp)
+ {
+ ++len1;
+ }
+ key = xstrndup (text, len1);
+
+ if (*endp)
+ {
+ struct m4_symbol_arg **arg
+ = (struct m4_symbol_arg **)
+ m4_hash_lookup (VALUE_ARG_SIGNATURE (value), key);
+
+ if (arg)
+ {
+ i = SYMBOL_ARG_INDEX (*arg);
+ assert (i < argc);
+ m4_shipout_string (context, obs, M4ARG (i), M4ARGLEN (i),
+ false);
+ }
+ }
+ else
+ {
+ m4_error (context, 0, 0, argv->info,
+ _("unterminated parameter reference: %s"), key);
+ }
+
+ len -= endp - text;
+ text = endp;
+
+ free (key);
+ }
+ break;
+ }
}
}
@@ -873,7 +873,7 @@ trace_flush (m4 *context, unsigned int start)
Should be called prior to m4_macro_call(). */
void
m4_trace_prepare (m4 *context, const m4_call_info *info,
- m4_symbol_value *value)
+ m4_symbol_value *value)
{
const m4_string_pair *quotes = NULL;
size_t arg_length = m4_get_max_debug_arg_length_opt (context);
@@ -887,7 +887,7 @@ m4_trace_prepare (m4 *context, const m4_call_info *info,
obstack_grow (&context->trace_messages, info->name, info->name_len);
obstack_grow (&context->trace_messages, " ... = ", 7);
m4__symbol_value_print (context, value, &context->trace_messages, quotes,
- false, NULL, &arg_length, module);
+ false, NULL, &arg_length, module);
trace_flush (context, start);
}
}
@@ -913,10 +913,10 @@ trace_pre (m4 *context, m4_macro_args *argv)
bool module = (trace_level & M4_DEBUG_TRACE_MODULE) != 0;
if (trace_level & M4_DEBUG_TRACE_QUOTE)
- quotes = m4_get_syntax_quotes (M4SYNTAX);
+ quotes = m4_get_syntax_quotes (M4SYNTAX);
obstack_1grow (trace, '(');
m4__arg_print (context, trace, argv, 1, quotes, false, NULL, ", ",
- &arg_length, true, module);
+ &arg_length, true, module);
obstack_1grow (trace, ')');
}
return start;
@@ -949,7 +949,7 @@ m4__adjust_refcount (m4 *context, size_t level, bool increase)
{
m4__macro_arg_stacks *stack = &context->arg_stacks[level];
assert (level < context->stacks_count && stack->args
- && (increase || stack->refcount));
+ && (increase || stack->refcount));
if (increase)
stack->refcount++;
else if (--stack->refcount == 0)
@@ -957,14 +957,14 @@ m4__adjust_refcount (m4 *context, size_t level, bool increase)
obstack_free (stack->args, stack->args_base);
obstack_free (stack->argv, stack->argv_base);
if ((debug_macro_level & PRINT_ARGCOUNT_CHANGES) && 1 < stack->argcount)
- xfprintf (stderr, "m4debug: -%zu- freeing %zu args, level=%zu\n",
- macro_call_id, stack->argcount, level);
+ xfprintf (stderr, "m4debug: -%zu- freeing %zu args, level=%zu\n",
+ macro_call_id, stack->argcount, level);
stack->argcount = 0;
}
if (debug_macro_level
& (increase ? PRINT_REFCOUNT_INCREASE : PRINT_REFCOUNT_DECREASE))
xfprintf (stderr, "m4debug: level %zu refcount=%zu\n", level,
- stack->refcount);
+ stack->refcount);
return stack->refcount;
}
@@ -981,31 +981,31 @@ m4__arg_adjust_refcount (m4 *context, m4_macro_args *argv, bool increase)
if (argv->has_ref)
for (i = 0; i < argv->arraylen; i++)
if (argv->array[i]->type == M4_SYMBOL_COMP)
- {
- chain = argv->array[i]->u.u_c.chain;
- while (chain)
- {
- switch (chain->type)
- {
- case M4__CHAIN_STR:
- if (chain->u.u_s.level < SIZE_MAX)
- m4__adjust_refcount (context, chain->u.u_s.level,
- increase);
- break;
- case M4__CHAIN_FUNC:
- break;
- case M4__CHAIN_ARGV:
- assert (chain->u.u_a.argv->inuse);
- m4__arg_adjust_refcount (context, chain->u.u_a.argv,
- increase);
- break;
- default:
- assert (!"m4__arg_adjust_refcount");
- abort ();
- }
- chain = chain->next;
- }
- }
+ {
+ chain = argv->array[i]->u.u_c.chain;
+ while (chain)
+ {
+ switch (chain->type)
+ {
+ case M4__CHAIN_STR:
+ if (chain->u.u_s.level < SIZE_MAX)
+ m4__adjust_refcount (context, chain->u.u_s.level,
+ increase);
+ break;
+ case M4__CHAIN_FUNC:
+ break;
+ case M4__CHAIN_ARGV:
+ assert (chain->u.u_a.argv->inuse);
+ m4__arg_adjust_refcount (context, chain->u.u_a.argv,
+ increase);
+ break;
+ default:
+ assert (!"m4__arg_adjust_refcount");
+ abort ();
+ }
+ chain = chain->next;
+ }
+ }
m4__adjust_refcount (context, argv->level, increase);
return result;
}
@@ -1024,14 +1024,14 @@ arg_mark (m4_macro_args *argv)
if (argv->wrapper)
{
for (i = 0; i < argv->arraylen; i++)
- if (argv->array[i]->type == M4_SYMBOL_COMP
- && argv->array[i]->u.u_c.wrapper)
- {
- chain = argv->array[i]->u.u_c.chain;
- assert (!chain->next && chain->type == M4__CHAIN_ARGV);
- if (!chain->u.u_a.argv->inuse)
- arg_mark (chain->u.u_a.argv);
- }
+ if (argv->array[i]->type == M4_SYMBOL_COMP
+ && argv->array[i]->u.u_c.wrapper)
+ {
+ chain = argv->array[i]->u.u_c.chain;
+ assert (!chain->next && chain->type == M4__CHAIN_ARGV);
+ if (!chain->u.u_a.argv->inuse)
+ arg_mark (chain->u.u_a.argv);
+ }
}
}
@@ -1043,8 +1043,8 @@ arg_mark (m4_macro_args *argv)
empty. */
static m4_symbol_value *
make_argv_ref (m4 *context, m4_symbol_value *value, m4_obstack *obs,
- size_t level, m4_macro_args *argv, size_t arg, bool flatten,
- const m4_string_pair *quotes)
+ size_t level, m4_macro_args *argv, size_t arg, bool flatten,
+ const m4_string_pair *quotes)
{
m4__symbol_chain *chain;
@@ -1060,36 +1060,36 @@ make_argv_ref (m4 *context, m4_symbol_value *value, m4_obstack *obs,
{
size_t i;
for (i = 0; i < argv->arraylen; i++)
- {
- if ((argv->array[i]->type == M4_SYMBOL_COMP
- && argv->array[i]->u.u_c.wrapper)
- || level < SIZE_MAX)
- break;
- if (arg == 1)
- {
- m4__push_arg_quote (context, obs, argv, i + 1, quotes);
- /* TODO support M4_SYNTAX_COMMA. */
- obstack_1grow (obs, ',');
- }
- else
- arg--;
- }
+ {
+ if ((argv->array[i]->type == M4_SYMBOL_COMP
+ && argv->array[i]->u.u_c.wrapper)
+ || level < SIZE_MAX)
+ break;
+ if (arg == 1)
+ {
+ m4__push_arg_quote (context, obs, argv, i + 1, quotes);
+ /* TODO support M4_SYNTAX_COMMA. */
+ obstack_1grow (obs, ',');
+ }
+ else
+ arg--;
+ }
assert (i < argv->arraylen);
if (i + 1 == argv->arraylen)
- {
- assert (argv->array[i]->type == M4_SYMBOL_COMP
- && argv->array[i]->u.u_c.wrapper);
- chain = argv->array[i]->u.u_c.chain;
- assert (!chain->next && chain->type == M4__CHAIN_ARGV
- && !chain->u.u_a.skip_last);
- argv = chain->u.u_a.argv;
- arg += chain->u.u_a.index - 1;
- }
+ {
+ assert (argv->array[i]->type == M4_SYMBOL_COMP
+ && argv->array[i]->u.u_c.wrapper);
+ chain = argv->array[i]->u.u_c.chain;
+ assert (!chain->next && chain->type == M4__CHAIN_ARGV
+ && !chain->u.u_a.skip_last);
+ argv = chain->u.u_a.argv;
+ arg += chain->u.u_a.index - 1;
+ }
else
- {
- arg += i;
- break;
- }
+ {
+ arg += i;
+ break;
+ }
}
m4__make_text_link (obs, &value->u.u_c.chain, &value->u.u_c.end);
@@ -1111,7 +1111,7 @@ make_argv_ref (m4 *context, m4_symbol_value *value, m4_obstack *obs,
chain->u.u_a.comma = false;
chain->u.u_a.skip_last = false;
chain->u.u_a.quotes = m4__quote_cache (M4SYNTAX, obs, chain->quote_age,
- quotes);
+ quotes);
return value;
}
@@ -1135,7 +1135,7 @@ arg_symbol (m4_macro_args *argv, size_t arg, size_t *level, bool flatten)
{
value = argv->array[arg - 1];
if (flatten && m4_is_symbol_value_func (value))
- value = &empty_symbol;
+ value = &empty_symbol;
return value;
}
@@ -1145,22 +1145,22 @@ arg_symbol (m4_macro_args *argv, size_t arg, size_t *level, bool flatten)
{
value = argv->array[i];
if (value->type == M4_SYMBOL_COMP && value->u.u_c.wrapper)
- {
- m4__symbol_chain *chain = value->u.u_c.chain;
- assert (!chain->next && chain->type == M4__CHAIN_ARGV);
- if (arg <= (chain->u.u_a.argv->argc - chain->u.u_a.index
- - chain->u.u_a.skip_last))
- {
- value = arg_symbol (chain->u.u_a.argv,
- chain->u.u_a.index - 1 + arg, level,
- flatten || chain->u.u_a.flatten);
- break;
- }
- arg -= (chain->u.u_a.argv->argc - chain->u.u_a.index
- - chain->u.u_a.skip_last);
- }
+ {
+ m4__symbol_chain *chain = value->u.u_c.chain;
+ assert (!chain->next && chain->type == M4__CHAIN_ARGV);
+ if (arg <= (chain->u.u_a.argv->argc - chain->u.u_a.index
+ - chain->u.u_a.skip_last))
+ {
+ value = arg_symbol (chain->u.u_a.argv,
+ chain->u.u_a.index - 1 + arg, level,
+ flatten || chain->u.u_a.flatten);
+ break;
+ }
+ arg -= (chain->u.u_a.argv->argc - chain->u.u_a.index
+ - chain->u.u_a.skip_last);
+ }
else if (--arg == 0)
- break;
+ break;
}
return value;
}
@@ -1242,27 +1242,27 @@ m4_arg_text (m4 *context, m4_macro_args *argv, size_t arg, bool flatten)
while (chain)
{
switch (chain->type)
- {
- case M4__CHAIN_STR:
- obstack_grow (obs, chain->u.u_s.str, chain->u.u_s.len);
- break;
- case M4__CHAIN_FUNC:
- if (flatten)
- break;
- assert (!"m4_arg_text");
- abort ();
- case M4__CHAIN_ARGV:
- assert (!chain->u.u_a.has_func || flatten || argv->flatten);
- m4__arg_print (context, obs, chain->u.u_a.argv, chain->u.u_a.index,
- m4__quote_cache (M4SYNTAX, NULL, chain->quote_age,
- chain->u.u_a.quotes),
- flatten || argv->flatten || chain->u.u_a.flatten,
- NULL, NULL, NULL, false, false);
- break;
- default:
- assert (!"m4_arg_text");
- abort ();
- }
+ {
+ case M4__CHAIN_STR:
+ obstack_grow (obs, chain->u.u_s.str, chain->u.u_s.len);
+ break;
+ case M4__CHAIN_FUNC:
+ if (flatten)
+ break;
+ assert (!"m4_arg_text");
+ abort ();
+ case M4__CHAIN_ARGV:
+ assert (!chain->u.u_a.has_func || flatten || argv->flatten);
+ m4__arg_print (context, obs, chain->u.u_a.argv, chain->u.u_a.index,
+ m4__quote_cache (M4SYNTAX, NULL, chain->quote_age,
+ chain->u.u_a.quotes),
+ flatten || argv->flatten || chain->u.u_a.flatten,
+ NULL, NULL, NULL, false, false);
+ break;
+ default:
+ assert (!"m4_arg_text");
+ abort ();
+ }
chain = chain->next;
}
obstack_1grow (obs, '\0');
@@ -1273,7 +1273,7 @@ m4_arg_text (m4 *context, m4_macro_args *argv, size_t arg, bool flatten)
Both indices must be non-zero. Return true if the arguments
contain the same contents; often more efficient than
!strcmp (m4_arg_text (context, argv, indexa),
- m4_arg_text (context, argv, indexb)). */
+ m4_arg_text (context, argv, indexb)). */
bool
m4_arg_equal (m4 *context, m4_macro_args *argv, size_t indexa, size_t indexb)
{
@@ -1291,9 +1291,9 @@ m4_arg_equal (m4 *context, m4_macro_args *argv, size_t indexa, size_t indexb)
return sa == sb;
if (m4_is_symbol_value_text (sa) && m4_is_symbol_value_text (sb))
return (m4_get_symbol_value_len (sa) == m4_get_symbol_value_len (sb)
- && memcmp (m4_get_symbol_value_text (sa),
- m4_get_symbol_value_text (sb),
- m4_get_symbol_value_len (sa)) == 0);
+ && memcmp (m4_get_symbol_value_text (sa),
+ m4_get_symbol_value_text (sb),
+ m4_get_symbol_value_len (sa)) == 0);
/* Convert both arguments to chains, if not one already. */
switch (sa->type)
@@ -1341,76 +1341,76 @@ m4_arg_equal (m4 *context, m4_macro_args *argv, size_t indexa, size_t indexb)
while (ca && cb)
{
if (ca->type == M4__CHAIN_ARGV)
- {
- tmpa.next = NULL;
- tmpa.type = M4__CHAIN_STR;
- tmpa.u.u_s.str = NULL;
- tmpa.u.u_s.len = 0;
- chain = &tmpa;
- m4__arg_print (context, obs, ca->u.u_a.argv, ca->u.u_a.index,
- m4__quote_cache (M4SYNTAX, NULL, ca->quote_age,
- ca->u.u_a.quotes),
- argv->flatten || ca->u.u_a.flatten, &chain, NULL,
- NULL, false, false);
- assert (obstack_object_size (obs) == 0 && chain != &tmpa);
- chain->next = ca->next;
- ca = tmpa.next;
- continue;
- }
+ {
+ tmpa.next = NULL;
+ tmpa.type = M4__CHAIN_STR;
+ tmpa.u.u_s.str = NULL;
+ tmpa.u.u_s.len = 0;
+ chain = &tmpa;
+ m4__arg_print (context, obs, ca->u.u_a.argv, ca->u.u_a.index,
+ m4__quote_cache (M4SYNTAX, NULL, ca->quote_age,
+ ca->u.u_a.quotes),
+ argv->flatten || ca->u.u_a.flatten, &chain, NULL,
+ NULL, false, false);
+ assert (obstack_object_size (obs) == 0 && chain != &tmpa);
+ chain->next = ca->next;
+ ca = tmpa.next;
+ continue;
+ }
if (cb->type == M4__CHAIN_ARGV)
- {
- tmpb.next = NULL;
- tmpb.type = M4__CHAIN_STR;
- tmpb.u.u_s.str = NULL;
- tmpb.u.u_s.len = 0;
- chain = &tmpb;
- m4__arg_print (context, obs, cb->u.u_a.argv, cb->u.u_a.index,
- m4__quote_cache (M4SYNTAX, NULL, cb->quote_age,
- cb->u.u_a.quotes),
- argv->flatten || cb->u.u_a.flatten, &chain, NULL,
- NULL, false, false);
- assert (obstack_object_size (obs) == 0 && chain != &tmpb);
- chain->next = cb->next;
- cb = tmpb.next;
- continue;
- }
+ {
+ tmpb.next = NULL;
+ tmpb.type = M4__CHAIN_STR;
+ tmpb.u.u_s.str = NULL;
+ tmpb.u.u_s.len = 0;
+ chain = &tmpb;
+ m4__arg_print (context, obs, cb->u.u_a.argv, cb->u.u_a.index,
+ m4__quote_cache (M4SYNTAX, NULL, cb->quote_age,
+ cb->u.u_a.quotes),
+ argv->flatten || cb->u.u_a.flatten, &chain, NULL,
+ NULL, false, false);
+ assert (obstack_object_size (obs) == 0 && chain != &tmpb);
+ chain->next = cb->next;
+ cb = tmpb.next;
+ continue;
+ }
if (ca->type == M4__CHAIN_FUNC)
- {
- if (cb->type != M4__CHAIN_FUNC || ca->u.builtin != cb->u.builtin)
- return false;
- ca = ca->next;
- cb = cb->next;
- continue;
- }
+ {
+ if (cb->type != M4__CHAIN_FUNC || ca->u.builtin != cb->u.builtin)
+ return false;
+ ca = ca->next;
+ cb = cb->next;
+ continue;
+ }
assert (ca->type == M4__CHAIN_STR && cb->type == M4__CHAIN_STR);
if (ca->u.u_s.len == cb->u.u_s.len)
- {
- if (memcmp (ca->u.u_s.str, cb->u.u_s.str, ca->u.u_s.len) != 0)
- return false;
- ca = ca->next;
- cb = cb->next;
- }
+ {
+ if (memcmp (ca->u.u_s.str, cb->u.u_s.str, ca->u.u_s.len) != 0)
+ return false;
+ ca = ca->next;
+ cb = cb->next;
+ }
else if (ca->u.u_s.len < cb->u.u_s.len)
- {
- if (memcmp (ca->u.u_s.str, cb->u.u_s.str, ca->u.u_s.len) != 0)
- return false;
- tmpb.next = cb->next;
- tmpb.u.u_s.str = cb->u.u_s.str + ca->u.u_s.len;
- tmpb.u.u_s.len = cb->u.u_s.len - ca->u.u_s.len;
- ca = ca->next;
- cb = &tmpb;
- }
+ {
+ if (memcmp (ca->u.u_s.str, cb->u.u_s.str, ca->u.u_s.len) != 0)
+ return false;
+ tmpb.next = cb->next;
+ tmpb.u.u_s.str = cb->u.u_s.str + ca->u.u_s.len;
+ tmpb.u.u_s.len = cb->u.u_s.len - ca->u.u_s.len;
+ ca = ca->next;
+ cb = &tmpb;
+ }
else
- {
- assert (cb->u.u_s.len < ca->u.u_s.len);
- if (memcmp (ca->u.u_s.str, cb->u.u_s.str, cb->u.u_s.len) != 0)
- return false;
- tmpa.next = ca->next;
- tmpa.u.u_s.str = ca->u.u_s.str + cb->u.u_s.len;
- tmpa.u.u_s.len = ca->u.u_s.len - cb->u.u_s.len;
- ca = &tmpa;
- cb = cb->next;
- }
+ {
+ assert (cb->u.u_s.len < ca->u.u_s.len);
+ if (memcmp (ca->u.u_s.str, cb->u.u_s.str, cb->u.u_s.len) != 0)
+ return false;
+ tmpa.next = ca->next;
+ tmpa.u.u_s.str = ca->u.u_s.str + cb->u.u_s.len;
+ tmpa.u.u_s.len = ca->u.u_s.len - cb->u.u_s.len;
+ ca = &tmpa;
+ cb = cb->next;
+ }
}
/* If we get this far, the two arguments are equal only if both
@@ -1462,30 +1462,30 @@ m4_arg_len (m4 *context, m4_macro_args *argv, size_t arg, bool flatten)
size_t limit;
const m4_string_pair *quotes;
switch (chain->type)
- {
- case M4__CHAIN_STR:
- len += chain->u.u_s.len;
- break;
- case M4__CHAIN_FUNC:
- assert (flatten);
- break;
- case M4__CHAIN_ARGV:
- i = chain->u.u_a.index;
- limit = chain->u.u_a.argv->argc - i - chain->u.u_a.skip_last;
- quotes = m4__quote_cache (M4SYNTAX, NULL, chain->quote_age,
- chain->u.u_a.quotes);
- assert (limit);
- if (quotes)
- len += (quotes->len1 + quotes->len2) * limit;
- len += limit - 1;
- while (limit--)
- len += m4_arg_len (context, chain->u.u_a.argv, i++,
- flatten || chain->u.u_a.flatten);
- break;
- default:
- assert (!"m4_arg_len");
- abort ();
- }
+ {
+ case M4__CHAIN_STR:
+ len += chain->u.u_s.len;
+ break;
+ case M4__CHAIN_FUNC:
+ assert (flatten);
+ break;
+ case M4__CHAIN_ARGV:
+ i = chain->u.u_a.index;
+ limit = chain->u.u_a.argv->argc - i - chain->u.u_a.skip_last;
+ quotes = m4__quote_cache (M4SYNTAX, NULL, chain->quote_age,
+ chain->u.u_a.quotes);
+ assert (limit);
+ if (quotes)
+ len += (quotes->len1 + quotes->len2) * limit;
+ len += limit - 1;
+ while (limit--)
+ len += m4_arg_len (context, chain->u.u_a.argv, i++,
+ flatten || chain->u.u_a.flatten);
+ break;
+ default:
+ assert (!"m4_arg_len");
+ abort ();
+ }
chain = chain->next;
}
assert (len || flatten);
@@ -1516,9 +1516,9 @@ m4_arg_func (m4_macro_args *argv, size_t arg)
length. MAX_LEN and CHAINP may not both be specified. */
bool
m4__arg_print (m4 *context, m4_obstack *obs, m4_macro_args *argv, size_t arg,
- const m4_string_pair *quotes, bool flatten,
- m4__symbol_chain **chainp, const char *sep, size_t *max_len,
- bool quote_each, bool module)
+ const m4_string_pair *quotes, bool flatten,
+ m4__symbol_chain **chainp, const char *sep, size_t *max_len,
+ bool quote_each, bool module)
{
size_t len = max_len ? *max_len : SIZE_MAX;
size_t i;
@@ -1535,22 +1535,22 @@ m4__arg_print (m4 *context, m4_obstack *obs, m4_macro_args *argv, size_t arg,
for (i = arg; i < argv->argc; i++)
{
if (quote_each && max_len)
- len = *max_len;
+ len = *max_len;
if (use_sep && m4_shipout_string_trunc (obs, sep, sep_len, NULL, plen))
- return true;
+ return true;
use_sep = true;
if (quotes && !quote_each
- && m4_shipout_string_trunc (obs, quotes->str1, quotes->len1, NULL,
- plen))
- return true;
+ && m4_shipout_string_trunc (obs, quotes->str1, quotes->len1, NULL,
+ plen))
+ return true;
if (m4__symbol_value_print (context, arg_symbol (argv, i, NULL, flatten),
- obs, quote_each ? quotes : NULL, flatten,
- chainp, &len, module))
- return true;
+ obs, quote_each ? quotes : NULL, flatten,
+ chainp, &len, module))
+ return true;
if (quotes && !quote_each
- && m4_shipout_string_trunc (obs, quotes->str2, quotes->len2, NULL,
- plen))
- return true;
+ && m4_shipout_string_trunc (obs, quotes->str2, quotes->len2, NULL,
+ plen))
+ return true;
}
if (max_len)
*max_len = len;
@@ -1568,7 +1568,7 @@ m4__arg_print (m4 *context, m4_obstack *obs, m4_macro_args *argv, size_t arg,
regardless of global trace state. */
m4_macro_args *
m4_make_argv_ref (m4 *context, m4_macro_args *argv, const char *argv0,
- size_t argv0_len, bool flatten, bool trace)
+ size_t argv0_len, bool flatten, bool trace)
{
m4_macro_args *new_argv;
m4_symbol_value *value;
@@ -1579,12 +1579,12 @@ m4_make_argv_ref (m4 *context, m4_macro_args *argv, const char *argv0,
info = (m4_call_info *) obstack_copy (obs, argv->info, sizeof *info);
new_value = (m4_symbol_value *) obstack_alloc (obs, sizeof *value);
value = make_argv_ref (context, new_value, obs, context->expansion_level - 1,
- argv, 2, flatten, NULL);
+ argv, 2, flatten, NULL);
if (!value)
{
obstack_free (obs, new_value);
new_argv = (m4_macro_args *) obstack_alloc (obs, offsetof (m4_macro_args,
- array));
+ array));
new_argv->arraylen = 0;
new_argv->wrapper = false;
new_argv->has_ref = false;
@@ -1594,8 +1594,8 @@ m4_make_argv_ref (m4 *context, m4_macro_args *argv, const char *argv0,
else
{
new_argv = (m4_macro_args *) obstack_alloc (obs, (offsetof (m4_macro_args,
- array)
- + sizeof value));
+ array)
+ + sizeof value));
new_argv->arraylen = 1;
new_argv->array[0] = value;
new_argv->wrapper = true;
@@ -1625,10 +1625,10 @@ m4_push_arg (m4 *context, m4_obstack *obs, m4_macro_args *argv, size_t arg)
{
assert (argv->info);
m4_set_symbol_value_text (&value, argv->info->name, argv->info->name_len,
- 0);
+ 0);
if (m4__push_symbol (context, &value, context->expansion_level - 1,
- argv->inuse))
- arg_mark (argv);
+ argv->inuse))
+ arg_mark (argv);
}
else
m4__push_arg_quote (context, obs, argv, arg, NULL);
@@ -1639,7 +1639,7 @@ m4_push_arg (m4 *context, m4_obstack *obs, m4_macro_args *argv, size_t arg)
delimiters that were in effect when the reference was created. */
void
m4__push_arg_quote (m4 *context, m4_obstack *obs, m4_macro_args *argv,
- size_t arg, const m4_string_pair *quotes)
+ size_t arg, const m4_string_pair *quotes)
{
size_t level;
m4_symbol_value *value = arg_symbol (argv, arg, &level, false);
@@ -1658,7 +1658,7 @@ m4__push_arg_quote (m4 *context, m4_obstack *obs, m4_macro_args *argv,
first argument. If QUOTE, also push quoting around each arg. */
void
m4_push_args (m4 *context, m4_obstack *obs, m4_macro_args *argv, bool skip,
- bool quote)
+ bool quote)
{
m4_symbol_value tmp;
m4_symbol_value *value;
@@ -1675,7 +1675,7 @@ m4_push_args (m4 *context, m4_obstack *obs, m4_macro_args *argv, bool skip,
}
value = make_argv_ref (context, &tmp, obs, -1, argv, i, argv->flatten,
- quote ? quotes : NULL);
+ quote ? quotes : NULL);
assert (value == &tmp);
if (m4__push_symbol (context, value, -1, argv->inuse))
arg_mark (argv);
@@ -1701,49 +1701,49 @@ m4_wrap_args (m4 *context, m4_macro_args *argv)
for (i = 1; i < limit; i++)
{
if (i != 1)
- obstack_1grow (obs, ' ');
+ obstack_1grow (obs, ' ');
value = m4_arg_symbol (argv, i);
switch (value->type)
- {
- case M4_SYMBOL_TEXT:
- obstack_grow (obs, m4_get_symbol_value_text (value),
- m4_get_symbol_value_len (value));
- break;
- case M4_SYMBOL_FUNC:
- m4__append_builtin (obs, value->u.builtin, NULL, end);
- break;
- case M4_SYMBOL_COMP:
- chain = value->u.u_c.chain;
- while (chain)
- {
- switch (chain->type)
- {
- case M4__CHAIN_STR:
- obstack_grow (obs, chain->u.u_s.str, chain->u.u_s.len);
- break;
- case M4__CHAIN_FUNC:
- m4__append_builtin (obs, chain->u.builtin, NULL, end);
- break;
- case M4__CHAIN_ARGV:
- m4__arg_print (context, obs, chain->u.u_a.argv,
- chain->u.u_a.index,
- m4__quote_cache (M4SYNTAX, NULL,
- chain->quote_age,
- chain->u.u_a.quotes),
- chain->u.u_a.flatten, end, NULL, NULL, false,
- false);
- break;
- default:
- assert (!"m4_wrap_args");
- abort ();
- }
- chain = chain->next;
- }
- break;
- default:
- assert (!"m4_wrap_args");
- abort ();
- }
+ {
+ case M4_SYMBOL_TEXT:
+ obstack_grow (obs, m4_get_symbol_value_text (value),
+ m4_get_symbol_value_len (value));
+ break;
+ case M4_SYMBOL_FUNC:
+ m4__append_builtin (obs, value->u.builtin, NULL, end);
+ break;
+ case M4_SYMBOL_COMP:
+ chain = value->u.u_c.chain;
+ while (chain)
+ {
+ switch (chain->type)
+ {
+ case M4__CHAIN_STR:
+ obstack_grow (obs, chain->u.u_s.str, chain->u.u_s.len);
+ break;
+ case M4__CHAIN_FUNC:
+ m4__append_builtin (obs, chain->u.builtin, NULL, end);
+ break;
+ case M4__CHAIN_ARGV:
+ m4__arg_print (context, obs, chain->u.u_a.argv,
+ chain->u.u_a.index,
+ m4__quote_cache (M4SYNTAX, NULL,
+ chain->quote_age,
+ chain->u.u_a.quotes),
+ chain->u.u_a.flatten, end, NULL, NULL, false,
+ false);
+ break;
+ default:
+ assert (!"m4_wrap_args");
+ abort ();
+ }
+ chain = chain->next;
+ }
+ break;
+ default:
+ assert (!"m4_wrap_args");
+ abort ();
+ }
}
m4__push_wrapup_finish ();
}