270 |
arguments. This function is usually passed a newly pushdef()d symbol |
arguments. This function is usually passed a newly pushdef()d symbol |
271 |
that is already interned in the symbol table. The traced bit should |
that is already interned in the symbol table. The traced bit should |
272 |
be appropriately set by the caller. */ |
be appropriately set by the caller. */ |
273 |
void |
m4_symbol * |
274 |
m4_symbol_builtin (m4_symbol *symbol, lt_dlhandle handle, |
m4_symbol_builtin (m4_symbol *symbol, m4_token *token) |
|
m4_builtin_func *func, int flags, |
|
|
int min_args, int max_args) |
|
275 |
{ |
{ |
276 |
assert (symbol); |
assert (symbol); |
277 |
assert (handle); |
assert (token); |
278 |
assert (func); |
assert (TOKEN_FUNC (token)); |
279 |
|
assert (TOKEN_HANDLE (token)); |
280 |
|
assert (TOKEN_TYPE (token) == M4_TOKEN_FUNC); |
281 |
|
|
282 |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
283 |
xfree (SYMBOL_TEXT (symbol)); |
xfree (SYMBOL_TEXT (symbol)); |
284 |
|
|
285 |
SYMBOL_TYPE (symbol) = M4_TOKEN_FUNC; |
SYMBOL_TYPE (symbol) = TOKEN_TYPE (token); |
286 |
SYMBOL_FUNC (symbol) = func; |
SYMBOL_FUNC (symbol) = TOKEN_FUNC (token); |
287 |
SYMBOL_HANDLE (symbol) = handle; |
SYMBOL_HANDLE (symbol) = TOKEN_HANDLE (token); |
288 |
SYMBOL_FLAGS (symbol) = flags; |
SYMBOL_FLAGS (symbol) = TOKEN_FLAGS (token); |
289 |
SYMBOL_MIN_ARGS (symbol) = min_args; |
SYMBOL_ARG_SIGNATURE (symbol) = TOKEN_ARG_SIGNATURE (token); |
290 |
SYMBOL_MAX_ARGS (symbol) = max_args; |
SYMBOL_MIN_ARGS (symbol) = TOKEN_MIN_ARGS (token); |
291 |
|
SYMBOL_MAX_ARGS (symbol) = TOKEN_MAX_ARGS (token); |
292 |
|
|
293 |
|
return symbol; |
294 |
} |
} |
295 |
|
|
296 |
/* ...and similarly for macro valued symbols. */ |
/* ...and similarly for macro valued symbols. */ |
297 |
void |
m4_symbol * |
298 |
m4_symbol_macro (m4_symbol *symbol, lt_dlhandle handle, |
m4_symbol_macro (m4_symbol *symbol, m4_token *token) |
|
const char *text, int flags, int min_args, int max_args) |
|
299 |
{ |
{ |
300 |
assert (symbol); |
assert (symbol); |
301 |
|
assert (TOKEN_TEXT (token)); |
302 |
|
assert (TOKEN_TYPE (token) == M4_TOKEN_TEXT); |
303 |
|
|
304 |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT) |
305 |
xfree (SYMBOL_TEXT (symbol)); |
xfree (SYMBOL_TEXT (symbol)); |
306 |
|
|
307 |
SYMBOL_TYPE (symbol) = M4_TOKEN_TEXT; |
SYMBOL_TYPE (symbol) = TOKEN_TYPE (token); |
308 |
SYMBOL_TEXT (symbol) = xstrdup (text); |
SYMBOL_TEXT (symbol) = xstrdup (TOKEN_TEXT (token)); |
309 |
SYMBOL_HANDLE (symbol) = handle; |
SYMBOL_HANDLE (symbol) = TOKEN_HANDLE (token); |
310 |
SYMBOL_FLAGS (symbol) = flags; |
SYMBOL_FLAGS (symbol) = TOKEN_FLAGS (token); |
311 |
SYMBOL_MIN_ARGS (symbol) = min_args; |
SYMBOL_ARG_SIGNATURE (symbol) = TOKEN_ARG_SIGNATURE (token); |
312 |
SYMBOL_MAX_ARGS (symbol) = max_args; |
SYMBOL_MIN_ARGS (symbol) = TOKEN_MIN_ARGS (token); |
313 |
|
SYMBOL_MAX_ARGS (symbol) = TOKEN_MAX_ARGS (token); |
314 |
|
|
315 |
|
return symbol; |
316 |
} |
} |
317 |
|
|
318 |
|
|