126 |
{ |
{ |
127 |
m4_hash_iterator *place = 0; |
m4_hash_iterator *place = 0; |
128 |
|
|
129 |
while ((place = m4_hash_iterator_next (hash, place))) |
while ((place = m4_get_hash_iterator_next (hash, place))) |
130 |
{ |
{ |
131 |
const char *symbol_name = (const char *) m4_hash_iterator_key (place); |
const char *symbol_name = (const char *) m4_get_hash_iterator_key (place); |
132 |
m4_symbol *symbol = m4_hash_iterator_value (place); |
m4_symbol *symbol = m4_get_hash_iterator_value (place); |
133 |
lt_dlhandle handle = SYMBOL_HANDLE (symbol); |
lt_dlhandle handle = SYMBOL_HANDLE (symbol); |
134 |
const char *module_name = handle ? m4_get_module_name (handle) : NULL; |
const char *module_name = handle ? m4_get_module_name (handle) : NULL; |
135 |
const m4_builtin *bp; |
const m4_builtin *bp; |
136 |
|
|
137 |
switch (SYMBOL_TYPE (symbol)) |
switch (SYMBOL_TYPE (symbol)) |
138 |
{ |
{ |
139 |
case M4_TOKEN_TEXT: |
case M4_SYMBOL_TEXT: |
140 |
fprintf (file, "T%lu,%lu", |
fprintf (file, "T%lu,%lu", |
141 |
(unsigned long) strlen (symbol_name), |
(unsigned long) strlen (symbol_name), |
142 |
(unsigned long) strlen (SYMBOL_TEXT (symbol))); |
(unsigned long) strlen (SYMBOL_TEXT (symbol))); |
151 |
fputc ('\n', file); |
fputc ('\n', file); |
152 |
break; |
break; |
153 |
|
|
154 |
case M4_TOKEN_FUNC: |
case M4_SYMBOL_FUNC: |
155 |
bp = m4_builtin_find_by_func |
bp = m4_builtin_find_by_func |
156 |
(m4_get_module_builtin_table (SYMBOL_HANDLE (symbol)), |
(m4_get_module_builtin_table (SYMBOL_HANDLE (symbol)), |
157 |
SYMBOL_FUNC (symbol)); |
SYMBOL_FUNC (symbol)); |
473 |
|
|
474 |
if (bp) |
if (bp) |
475 |
{ |
{ |
476 |
m4_token *token = XCALLOC (m4_token, 1); |
m4_symbol_value *token = XCALLOC (m4_symbol_value, 1); |
477 |
|
|
478 |
if (bp->groks_macro_args) |
if (bp->groks_macro_args) |
479 |
BIT_SET (TOKEN_FLAGS (token), TOKEN_MACRO_ARGS_BIT); |
BIT_SET (VALUE_FLAGS (token), VALUE_MACRO_ARGS_BIT); |
480 |
if (bp->blind_if_no_args) |
if (bp->blind_if_no_args) |
481 |
BIT_SET (TOKEN_FLAGS (token), TOKEN_BLIND_ARGS_BIT); |
BIT_SET (VALUE_FLAGS (token), VALUE_BLIND_ARGS_BIT); |
482 |
|
|
483 |
TOKEN_TYPE (token) = M4_TOKEN_FUNC; |
VALUE_TYPE (token) = M4_SYMBOL_FUNC; |
484 |
TOKEN_FUNC (token) = bp->func; |
VALUE_FUNC (token) = bp->func; |
485 |
TOKEN_HANDLE (token) = handle; |
VALUE_HANDLE (token) = handle; |
486 |
TOKEN_MIN_ARGS (token) = bp->min_args; |
VALUE_MIN_ARGS (token) = bp->min_args; |
487 |
TOKEN_MAX_ARGS (token) = bp->max_args; |
VALUE_MAX_ARGS (token) = bp->max_args; |
488 |
|
|
489 |
m4_symbol_pushdef (M4SYMTAB, string[0], token); |
m4_symbol_pushdef (M4SYMTAB, string[0], token); |
490 |
} |
} |
655 |
|
|
656 |
/* Enter a macro having an expansion text as a definition. */ |
/* Enter a macro having an expansion text as a definition. */ |
657 |
{ |
{ |
658 |
m4_token *token = XCALLOC (m4_token, 1); |
m4_symbol_value *token = XCALLOC (m4_symbol_value, 1); |
659 |
lt_dlhandle handle = 0; |
lt_dlhandle handle = 0; |
660 |
|
|
661 |
if (number[2] > 0) |
if (number[2] > 0) |
663 |
if (strcmp (m4_get_module_name (handle), string[2]) == 0) |
if (strcmp (m4_get_module_name (handle), string[2]) == 0) |
664 |
break; |
break; |
665 |
|
|
666 |
TOKEN_TYPE (token) = M4_TOKEN_TEXT; |
VALUE_TYPE (token) = M4_SYMBOL_TEXT; |
667 |
TOKEN_TEXT (token) = xstrdup (string[1]); |
VALUE_TEXT (token) = xstrdup (string[1]); |
668 |
TOKEN_HANDLE (token) = handle; |
VALUE_HANDLE (token) = handle; |
669 |
TOKEN_MAX_ARGS (token) = -1; |
VALUE_MAX_ARGS (token) = -1; |
670 |
|
|
671 |
m4_symbol_pushdef (M4SYMTAB, string[0], token); |
m4_symbol_pushdef (M4SYMTAB, string[0], token); |
672 |
} |
} |