38 |
const m4_builtin *bp; |
const m4_builtin *bp; |
39 |
const char *name; |
const char *name; |
40 |
{ |
{ |
41 |
List *module; |
lt_dlhandle handle = NULL; |
42 |
|
|
43 |
for (module = m4_modules; module != NULL; module = LIST_NEXT (module)) |
while ((handle = lt_dlhandle_next (handle))) |
44 |
{ |
{ |
45 |
m4_builtin *builtin = ((m4_module *) module)->bp; |
m4_builtin *builtin = m4_module_builtins (handle); |
46 |
|
|
47 |
if (builtin && (bp == NULL || bp == builtin)) |
if (builtin && (bp == NULL || bp == builtin)) |
48 |
{ |
{ |
54 |
|
|
55 |
return NULL; |
return NULL; |
56 |
} |
} |
57 |
|
|
58 |
const m4_builtin * |
const m4_builtin * |
59 |
m4_builtin_find_by_func (bp, func) |
m4_builtin_find_by_func (bp, func) |
60 |
const m4_builtin *bp; |
const m4_builtin *bp; |
61 |
m4_builtin_func *func; |
m4_builtin_func *func; |
62 |
{ |
{ |
63 |
List *module; |
lt_dlhandle handle = NULL; |
64 |
|
|
65 |
for (module = m4_modules; module != NULL; module = LIST_NEXT (module)) |
while ((handle = lt_dlhandle_next (handle))) |
66 |
{ |
{ |
67 |
m4_builtin *builtin = ((m4_module *) module)->bp; |
m4_builtin *builtin = m4_module_builtins (handle); |
68 |
|
|
69 |
if (builtin && (bp == NULL || bp == builtin)) |
if (builtin && (bp == NULL || bp == builtin)) |
70 |
{ |
{ |
85 |
`-------------------------------------------------------------------------*/ |
`-------------------------------------------------------------------------*/ |
86 |
|
|
87 |
void |
void |
88 |
m4_builtin_define (module, name, bp, mode, traced) |
m4_builtin_define (handle, name, bp, mode, traced) |
89 |
const m4_module *module; |
const lt_dlhandle handle; |
90 |
const char *name; |
const char *name; |
91 |
const m4_builtin *bp; |
const m4_builtin *bp; |
92 |
m4_symbol_lookup mode; |
m4_symbol_lookup mode; |
100 |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
101 |
xfree (SYMBOL_TEXT (symbol)); |
xfree (SYMBOL_TEXT (symbol)); |
102 |
|
|
103 |
SYMBOL_MODULE (symbol) = module; |
SYMBOL_HANDLE (symbol) = handle; |
104 |
SYMBOL_TYPE (symbol) = M4_TOKEN_FUNC; |
SYMBOL_TYPE (symbol) = M4_TOKEN_FUNC; |
105 |
SYMBOL_MACRO_ARGS (symbol) = bp->groks_macro_args; |
SYMBOL_MACRO_ARGS (symbol) = bp->groks_macro_args; |
106 |
SYMBOL_BLIND_NO_ARGS (symbol) = bp->blind_if_no_args; |
SYMBOL_BLIND_NO_ARGS (symbol) = bp->blind_if_no_args; |
110 |
} |
} |
111 |
|
|
112 |
void |
void |
113 |
m4_builtin_table_install (module, table) |
m4_builtin_table_install (handle, table) |
114 |
const m4_module *module; |
const lt_dlhandle handle; |
115 |
const m4_builtin *table; |
const m4_builtin *table; |
116 |
{ |
{ |
117 |
const m4_builtin *bp; |
const m4_builtin *bp; |
123 |
string = (char *) xmalloc (strlen (bp->name) + 4); |
string = (char *) xmalloc (strlen (bp->name) + 4); |
124 |
strcpy (string, "m4_"); |
strcpy (string, "m4_"); |
125 |
strcat (string, bp->name); |
strcat (string, bp->name); |
126 |
m4_builtin_define (module, string, bp, M4_SYMBOL_PUSHDEF, FALSE); |
m4_builtin_define (handle, string, bp, M4_SYMBOL_PUSHDEF, FALSE); |
127 |
free (string); |
free (string); |
128 |
} |
} |
129 |
else |
else |
130 |
m4_builtin_define (module, bp->name, bp, M4_SYMBOL_PUSHDEF, FALSE); |
m4_builtin_define (handle, bp->name, bp, M4_SYMBOL_PUSHDEF, FALSE); |
131 |
} |
} |
132 |
|
|
133 |
/*-------------------------------------------------------------------------. |
/*-------------------------------------------------------------------------. |
137 |
`-------------------------------------------------------------------------*/ |
`-------------------------------------------------------------------------*/ |
138 |
|
|
139 |
void |
void |
140 |
m4_macro_define (module, name, text, mode) |
m4_macro_define (handle, name, text, mode) |
141 |
const m4_module *module; |
const lt_dlhandle handle; |
142 |
const char *name; |
const char *name; |
143 |
const char *text; |
const char *text; |
144 |
m4_symbol_lookup mode; |
m4_symbol_lookup mode; |
151 |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
152 |
xfree (SYMBOL_TEXT (symbol)); |
xfree (SYMBOL_TEXT (symbol)); |
153 |
|
|
154 |
SYMBOL_MODULE (symbol) = module; |
SYMBOL_HANDLE (symbol) = handle; |
155 |
SYMBOL_TYPE (symbol) = M4_TOKEN_TEXT; |
SYMBOL_TYPE (symbol) = M4_TOKEN_TEXT; |
156 |
SYMBOL_MACRO_ARGS (symbol) = FALSE; |
SYMBOL_MACRO_ARGS (symbol) = FALSE; |
157 |
SYMBOL_BLIND_NO_ARGS (symbol) = FALSE; |
SYMBOL_BLIND_NO_ARGS (symbol) = FALSE; |
161 |
} |
} |
162 |
|
|
163 |
void |
void |
164 |
m4_macro_table_install (module, table) |
m4_macro_table_install (handle, table) |
165 |
const m4_module *module; |
const lt_dlhandle handle; |
166 |
const m4_macro *table; |
const m4_macro *table; |
167 |
{ |
{ |
168 |
const m4_macro *mp; |
const m4_macro *mp; |
169 |
|
|
170 |
for (mp = table; mp->name != NULL; mp++) |
for (mp = table; mp->name != NULL; mp++) |
171 |
m4_macro_define (module, mp->name, mp->value, M4_SYMBOL_PUSHDEF); |
m4_macro_define (handle, mp->name, mp->value, M4_SYMBOL_PUSHDEF); |
172 |
} |
} |