416 |
|
|
417 |
/* Handle deferred command line macro definitions. Must come after |
/* Handle deferred command line macro definitions. Must come after |
418 |
initialisation of the symbol table. */ |
initialisation of the symbol table. */ |
419 |
|
{ |
420 |
|
m4_token token; |
421 |
|
|
422 |
defines = head; |
bzero (&token, sizeof (token)); |
423 |
|
TOKEN_TYPE (&token) = M4_TOKEN_TEXT; |
424 |
|
|
425 |
while (defines != NULL) |
defines = head; |
426 |
{ |
|
427 |
macro_definition *next; |
while (defines != NULL) |
428 |
char *macro_value; |
{ |
429 |
m4_symbol *symbol; |
macro_definition *next; |
430 |
|
char *macro_value; |
431 |
switch (defines->code) |
m4_symbol *symbol; |
432 |
{ |
|
433 |
case 'D': |
switch (defines->code) |
434 |
macro_value = strchr (defines->macro, '='); |
{ |
435 |
if (macro_value == NULL) |
case 'D': |
436 |
macro_value = ""; |
macro_value = strchr (defines->macro, '='); |
437 |
else |
if (macro_value == NULL) |
438 |
*macro_value++ = '\0'; |
macro_value = ""; |
439 |
m4_macro_define (defines->macro, NULL, macro_value, 0x0, 0, -1); |
else |
440 |
break; |
*macro_value++ = '\0'; |
441 |
|
TOKEN_TEXT (&token) = macro_value; |
442 |
case 'U': |
m4_macro_define (defines->macro, &token); |
443 |
m4_symbol_delete (defines->macro); |
break; |
444 |
break; |
|
445 |
|
case 'U': |
446 |
case 't': |
m4_symbol_delete (defines->macro); |
447 |
symbol = m4_symbol_define (defines->macro); |
break; |
448 |
SYMBOL_TRACED (symbol) = TRUE; |
|
449 |
break; |
case 't': |
450 |
|
symbol = m4_symbol_define (defines->macro); |
451 |
case 'm': |
SYMBOL_TRACED (symbol) = TRUE; |
452 |
m4_module_load (defines->macro, 0); |
break; |
453 |
break; |
|
454 |
|
case 'm': |
455 |
default: |
m4_module_load (defines->macro, 0); |
456 |
M4ERROR ((warning_status, 0, |
break; |
457 |
"INTERNAL ERROR: Bad code in deferred arguments")); |
|
458 |
abort (); |
default: |
459 |
} |
M4ERROR ((warning_status, 0, |
460 |
|
"INTERNAL ERROR: Bad code in deferred arguments")); |
461 |
next = defines->next; |
abort (); |
462 |
xfree ((void *) defines); |
} |
463 |
defines = next; |
|
464 |
} |
next = defines->next; |
465 |
|
xfree ((void *) defines); |
466 |
|
defines = next; |
467 |
|
} |
468 |
|
} |
469 |
|
|
470 |
/* Interactive mode means unbuffered output, and interrupts ignored. */ |
/* Interactive mode means unbuffered output, and interrupts ignored. */ |
471 |
|
|