279 |
|
|
280 |
for (; data.size > 0; --data.size, data.base++) |
for (; data.size > 0; --data.size, data.base++) |
281 |
{ |
{ |
282 |
fprintf (stderr, "%s:\t", M4_SYMBOL_NAME (data.base[0])); |
m4_symbol *symbol = m4_lookup_symbol (data.base[0], M4_SYMBOL_LOOKUP); |
283 |
|
|
284 |
switch (M4_SYMBOL_TYPE (data.base[0])) |
fprintf (stderr, "%s:\t", data.base[0]); |
285 |
|
switch (M4_SYMBOL_TYPE (symbol)) |
286 |
{ |
{ |
287 |
case M4_TOKEN_TEXT: |
case M4_TOKEN_TEXT: |
288 |
if (debug_level & M4_DEBUG_TRACE_QUOTE) |
if (debug_level & M4_DEBUG_TRACE_QUOTE) |
289 |
fprintf (stderr, "%s%s%s\n", |
fprintf (stderr, "%s%s%s\n", |
290 |
lquote.string, M4_SYMBOL_TEXT (data.base[0]), rquote.string); |
lquote.string, M4_SYMBOL_TEXT (symbol), rquote.string); |
291 |
else |
else |
292 |
fprintf (stderr, "%s\n", M4_SYMBOL_TEXT (data.base[0])); |
fprintf (stderr, "%s\n", M4_SYMBOL_TEXT (symbol)); |
293 |
break; |
break; |
294 |
|
|
295 |
case M4_TOKEN_FUNC: |
case M4_TOKEN_FUNC: |
296 |
bp = m4_builtin_find_by_func (NULL, M4_SYMBOL_FUNC (data.base[0])); |
bp = m4_builtin_find_by_func (NULL, M4_SYMBOL_FUNC (symbol)); |
297 |
if (bp == NULL) |
if (bp == NULL) |
298 |
{ |
{ |
299 |
M4ERROR ((warning_status, 0, |
M4ERROR ((warning_status, 0, |
300 |
_("Undefined name `%s'"), M4_SYMBOL_NAME (data.base[0]))); |
_("Undefined name `%s'"), data.base[0])); |
301 |
abort (); |
abort (); |
302 |
} |
} |
303 |
fprintf (stderr, "<%s>\n", bp->name); |
fprintf (stderr, "<%s>\n", bp->name); |
609 |
/* Set_trace () is used by "traceon" and "traceoff" to enable and disable |
/* Set_trace () is used by "traceon" and "traceoff" to enable and disable |
610 |
tracing of a macro. It disables tracing if DATA is NULL, otherwise it |
tracing of a macro. It disables tracing if DATA is NULL, otherwise it |
611 |
enable tracing. */ |
enable tracing. */ |
612 |
static void |
static int |
613 |
set_trace (m4_symbol *symbol, const char *data) |
set_trace (const char *name, m4_symbol *symbol, void *data); |
614 |
|
|
615 |
|
static int |
616 |
|
set_trace (const char *name, m4_symbol *symbol, void *data) |
617 |
{ |
{ |
618 |
M4_SYMBOL_TRACED (symbol) = (boolean) (data != NULL); |
M4_SYMBOL_TRACED (symbol) = (boolean) (data != NULL); |
619 |
|
return 0; |
620 |
} |
} |
621 |
|
|
622 |
M4BUILTIN_HANDLER (traceon) |
M4BUILTIN_HANDLER (traceon) |
623 |
{ |
{ |
|
m4_symbol *symbol; |
|
624 |
int i; |
int i; |
625 |
|
|
626 |
if (argc == 1) |
if (argc == 1) |
627 |
m4_hack_all_symbols (set_trace, (char *) obs); |
m4_symtab_apply (set_trace, (char *) obs); |
628 |
else |
else |
629 |
for (i = 1; i < argc; i++) |
for (i = 1; i < argc; i++) |
630 |
{ |
{ |
631 |
symbol = m4_lookup_symbol (M4_TOKEN_DATA_TEXT (argv[i]), M4_SYMBOL_LOOKUP); |
const char *name = M4_TOKEN_DATA_TEXT (argv[i]); |
632 |
|
m4_symbol *symbol = m4_lookup_symbol (name, M4_SYMBOL_LOOKUP); |
633 |
if (symbol != NULL) |
if (symbol != NULL) |
634 |
set_trace (symbol, (char *) obs); |
set_trace (name, symbol, (char *) obs); |
635 |
else |
else |
636 |
M4ERROR ((warning_status, 0, |
M4ERROR ((warning_status, 0, _("Undefined name %s"), name)); |
|
_("Undefined name %s"), M4_TOKEN_DATA_TEXT (argv[i]))); |
|
637 |
} |
} |
638 |
} |
} |
639 |
|
|
640 |
/* Disable tracing of all specified macros, or all, if none is specified. */ |
/* Disable tracing of all specified macros, or all, if none is specified. */ |
641 |
M4BUILTIN_HANDLER (traceoff) |
M4BUILTIN_HANDLER (traceoff) |
642 |
{ |
{ |
|
m4_symbol *symbol; |
|
643 |
int i; |
int i; |
644 |
|
|
645 |
if (argc == 1) |
if (argc == 1) |
646 |
m4_hack_all_symbols (set_trace, NULL); |
m4_symtab_apply (set_trace, NULL); |
647 |
else |
else |
648 |
for (i = 1; i < argc; i++) |
for (i = 1; i < argc; i++) |
649 |
{ |
{ |
650 |
symbol = m4_lookup_symbol (M4_TOKEN_DATA_TEXT (argv[i]), M4_SYMBOL_LOOKUP); |
const char *name = M4_TOKEN_DATA_TEXT (argv[i]); |
651 |
|
m4_symbol *symbol = m4_lookup_symbol (name, M4_SYMBOL_LOOKUP); |
652 |
if (symbol != NULL) |
if (symbol != NULL) |
653 |
set_trace (symbol, NULL); |
set_trace (name, symbol, NULL); |
654 |
else |
else |
655 |
M4ERROR ((warning_status, 0, |
M4ERROR ((warning_status, 0, _("Undefined name %s"), name)); |
|
_("Undefined name %s"), M4_TOKEN_DATA_TEXT (argv[i]))); |
|
656 |
} |
} |
657 |
} |
} |
658 |
|
|