[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: 4-gary-macro-formal-parameter-preparation.patch
From: |
Gary V. Vaughan |
Subject: |
FYI: 4-gary-macro-formal-parameter-preparation.patch |
Date: |
Fri, 06 Jun 2003 12:23:42 +0100 |
User-agent: |
Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 |
I'm adding formal parameter support as a GNU extension:
define(`foo(bar, baz)', `arg2: $baz, arg1: $1')
foo(quux, quuux)
=> arg2: quuux, arg1: quux
This patch rearranges a bunch of stuff to make adding it easier.
--
())_. Gary V. Vaughan gary@(oranda.demon.co.uk|gnu.org)
( '/ Research Scientist http://www.oranda.demon.co.uk ,_())____
/ )= GNU Hacker http://www.gnu.org/software/libtool \' `&
`(_~)_ Tech' Author http://sources.redhat.com/autobook =`---d__/
Index: ChangeLog
from Gary V. Vaughan <address@hidden>
Begin preparations for supporting formal parameters in m4 macros.
* m4/m4private.h (struct m4_token_arg): Placeholder for holding
the details of a formal parameter.
(m4_token): Add an arg_signature member to hold a hash table for
looking up formal parameters.
* m4/input.c: Update more bitrotted comments.
(m4_push_builtin): Initialise arg_signature member.
(init_builtin_token): Copy arg_signature member.
* m4/m4module.h (m4_builtin_pushdef, m4_builtin_define)
(m4_macro_pushdef, m4_macro_define): Rewritten as macros to
replace...
* m4/builtin.c (m4_builtin_pushdef, m4_builtin_define)
(m4_macro_pushdef, m4_macro_define): ...these, And...
(m4_symbol_token): ...wrapped around this new function, which
vastly simplifies the arguments required by the functions it
replaces.
Changed all callers.
Index: m4/builtin.c
===================================================================
RCS file: /cvsroot/m4/m4/m4/builtin.c,v
retrieving revision 1.14
diff -u -p -u -r1.14 builtin.c
--- m4/builtin.c 12 Oct 2001 19:57:29 -0000 1.14
+++ m4/builtin.c 5 Jun 2003 16:10:19 -0000
@@ -71,39 +71,43 @@ m4_builtin_find_by_func (const m4_builti
}
m4_symbol *
-m4_builtin_pushdef (const char *name, lt_dlhandle handle,
- m4_builtin_func *func, int flags, int min_args,
- int max_args)
+m4_symbol_token (const char *name, m4_data_t type, m4_token *token,
+ m4_symbol *(*getter) (const char *name),
+ m4_symbol *(*setter) (m4_symbol *, m4_token *))
{
m4_symbol *symbol;
assert (name);
- assert (handle);
- assert (func);
+ assert (!token || (TOKEN_TYPE (token) == type));
+ assert (getter);
+ assert (setter);
- symbol = m4_symbol_pushdef (name);
+ symbol = (*getter) (name);
if (symbol)
- m4_symbol_builtin (symbol, handle, func, flags, min_args, max_args);
-
- return symbol;
-}
-
-m4_symbol *
-m4_builtin_define (const char *name, lt_dlhandle handle,
- m4_builtin_func *func, int flags,
- int min_args, int max_args)
-{
- m4_symbol *symbol;
+ {
+ m4_token empty;
- assert (name);
- assert (handle);
- assert (func);
+ if (!token)
+ {
+ bzero (&empty, sizeof (m4_token));
+ TOKEN_TYPE (&empty) = type;
+ switch (type)
+ {
+ case M4_TOKEN_TEXT:
+ TOKEN_TEXT (&empty) = "";
+ break;
+
+ case M4_TOKEN_FUNC:
+ case M4_TOKEN_VOID:
+ break;
+ }
- symbol = m4_symbol_define (name);
+ token = ∅
+ }
- if (symbol)
- m4_symbol_builtin (symbol, handle, func, flags, min_args, max_args);
+ (*setter) (symbol, token);
+ }
return symbol;
}
@@ -112,77 +116,59 @@ void
m4_builtin_table_install (lt_dlhandle handle, const m4_builtin *table)
{
const m4_builtin *bp;
+ m4_token token;
assert (handle);
assert (table);
+ bzero (&token, sizeof (m4_token));
+ TOKEN_TYPE (&token) = M4_TOKEN_FUNC;
+ TOKEN_HANDLE (&token) = handle;
+
for (bp = table; bp->name != NULL; bp++)
{
int flags = 0;
- char *key;
+ char *name;
if (prefix_all_builtins)
{
static const char prefix[] = "m4_";
size_t len = strlen (prefix) + strlen (bp->name);
- key = (char *) xmalloc (1+ len);
- snprintf (key, 1+ len, "%s%s", prefix, bp->name);
+ name = (char *) xmalloc (1+ len);
+ snprintf (name, 1+ len, "%s%s", prefix, bp->name);
}
else
- key = (char *) bp->name;
+ name = (char *) bp->name;
if (bp->groks_macro_args) BIT_SET (flags, TOKEN_MACRO_ARGS_BIT);
if (bp->blind_if_no_args) BIT_SET (flags, TOKEN_BLIND_ARGS_BIT);
- m4_builtin_pushdef (key, handle, bp->func, flags,
- bp->min_args, bp->max_args);
+ TOKEN_FUNC (&token) = bp->func;
+ TOKEN_FLAGS (&token) = flags;
+ TOKEN_MIN_ARGS (&token) = bp->min_args;
+ TOKEN_MAX_ARGS (&token) = bp->max_args;
+
+ m4_builtin_pushdef (name, &token);
if (prefix_all_builtins)
- xfree (key);
+ xfree (name);
}
}
-m4_symbol *
-m4_macro_pushdef (const char *name, lt_dlhandle handle, const char *text,
- int flags, int min_args, int max_args)
-{
- m4_symbol *symbol;
-
- assert (name);
- assert (text);
-
- symbol = m4_symbol_pushdef (name);
-
- if (symbol)
- m4_symbol_macro (symbol, handle, text, flags, min_args, max_args);
-
- return symbol;
-}
-
-m4_symbol *
-m4_macro_define (const char *name, lt_dlhandle handle, const char *text,
- int flags, int min_args, int max_args)
-{
- m4_symbol *symbol;
-
- assert (name);
- assert (text);
-
- symbol = m4_symbol_define (name);
-
- if (symbol)
- m4_symbol_macro (symbol, handle, text, flags, min_args, max_args);
-
- return symbol;
-}
-
-
void
m4_macro_table_install (lt_dlhandle handle, const m4_macro *table)
{
const m4_macro *mp;
+ m4_token token;
+
+ bzero (&token, sizeof (m4_token));
+ TOKEN_TYPE (&token) = M4_TOKEN_TEXT;
+ TOKEN_HANDLE (&token) = handle;
for (mp = table; mp->name != NULL; mp++)
- m4_macro_pushdef (mp->name, handle, mp->value, 0, 0, -1);
+ {
+ TOKEN_TEXT (&token) = (char *) mp->value;
+ m4_macro_pushdef (mp->name, &token);
+ }
}
Index: m4/input.c
===================================================================
RCS file: /cvsroot/m4/m4/m4/input.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 input.c
--- m4/input.c 4 Jun 2003 10:56:32 -0000 1.22
+++ m4/input.c 5 Jun 2003 16:10:19 -0000
@@ -325,6 +325,7 @@ m4_push_builtin (m4_token *td)
i->u.u_b.func = TOKEN_FUNC (td);
i->u.u_b.handle = TOKEN_HANDLE (td);
+ i->u.u_b.arg_signature= TOKEN_ARG_SIGNATURE (td);
i->u.u_b.min_args = TOKEN_MIN_ARGS (td);
i->u.u_b.max_args = TOKEN_MAX_ARGS (td);
i->u.u_b.flags = TOKEN_FLAGS (td);
@@ -530,6 +531,7 @@ init_builtin_token (m4_token *td)
TOKEN_FUNC (td) = isp->u.u_b.func;
TOKEN_HANDLE (td) = isp->u.u_b.handle;
TOKEN_FLAGS (td) = isp->u.u_b.flags;
+ TOKEN_ARG_SIGNATURE(td) = isp->u.u_b.arg_signature;
TOKEN_MIN_ARGS (td) = isp->u.u_b.min_args;
TOKEN_MAX_ARGS (td) = isp->u.u_b.max_args;
}
@@ -570,7 +572,7 @@ next_char (void)
}
}
-/* The function peek_input () is used to look at the next character in
+/* The function m4_peek_input () is used to look at the next character in
the input stream. At any given time, it reads from the input_block
on the top of the current input stack. */
int
@@ -730,12 +732,12 @@ m4_input_exit (void)
/* Parse and return a single token from the input stream. A token can
- either be TOKEN_EOF, if the input_stack is empty; it can be TOKEN_STRING
- for a quoted string; TOKEN_WORD for something that is a potential macro
- name; and TOKEN_SIMPLE for any single character that is not a part of
- any of the previous types.
+ either be M4_TOKEN_EOF, if the input_stack is empty; it can be
+ M4_TOKEN_STRING for a quoted string; M4_TOKEN_WORD for something that
+ is a potential macro name; and M4_TOKEN_SIMPLE for any single character
+ that is not a part of any of the previous types.
- Next_token () return the token type, and passes back a pointer to the
+ M4_next_token () returns the token type, and passes back a pointer to the
token data through TD. The token text is collected on the obstack
token_stack, which never contains more than one token text at a time.
The storage pointed to by the fields in TD is therefore subject to
Index: m4/m4module.h
===================================================================
RCS file: /cvsroot/m4/m4/m4/m4module.h,v
retrieving revision 1.40
diff -u -p -u -r1.40 m4module.h
--- m4/m4module.h 4 Jun 2003 10:56:32 -0000 1.40
+++ m4/m4module.h 5 Jun 2003 16:10:19 -0000
@@ -79,33 +79,6 @@ extern lt_dlhandle m4_module_find_by_bu
-/* --- MACRO (and builtin) MANAGEMENT --- */
-
-extern m4_symbol *m4_macro_pushdef (const char *name, lt_dlhandle handle,
- const char *text, int flags,
- int min_args, int max_args);
-extern m4_symbol *m4_macro_define (const char *name, lt_dlhandle handle,
- const char *text, int flags,
- int min_args, int max_args);
-extern void m4_macro_table_install (lt_dlhandle handle,
- const m4_macro *table);
-
-extern m4_symbol *m4_builtin_pushdef (const char *name, lt_dlhandle handle,
- m4_builtin_func *func, int flags,
- int min_args, int max_args);
-extern m4_symbol *m4_builtin_define (const char *name, lt_dlhandle handle,
- m4_builtin_func *func, int flags,
- int min_args, int max_args);
-extern void m4_builtin_table_install (lt_dlhandle handle,
- const m4_builtin *table);
-
-extern const m4_builtin *m4_builtin_find_by_name (
- const m4_builtin *, const char *);
-extern const m4_builtin *m4_builtin_find_by_func (
- const m4_builtin *, m4_builtin_func *);
-
-
-
/* --- SYMBOL TABLE MANAGEMENT --- */
extern m4_hash *m4_symtab;
@@ -120,12 +93,8 @@ extern m4_symbol *m4_symbol_pushdef (con
extern m4_symbol *m4_symbol_define (const char *);
extern void m4_symbol_popdef (const char *);
extern void m4_symbol_delete (const char *);
-extern void m4_symbol_builtin (m4_symbol *symbol, lt_dlhandle handle,
- m4_builtin_func *func, int flags,
- int min_args, int max_args);
-extern void m4_symbol_macro (m4_symbol *symbol, lt_dlhandle handle,
- const char *text, int flags,
- int min_args, int max_args);
+extern m4_symbol *m4_symbol_builtin (m4_symbol *symbol, m4_token *token);
+extern m4_symbol *m4_symbol_macro (m4_symbol *symbol, m4_token *token);
/* Various different token types. */
@@ -145,6 +114,39 @@ typedef enum {
M4_TOKEN_TEXT,
M4_TOKEN_FUNC
} m4_data_t;
+
+
+
+
+/* --- MACRO (and builtin) MANAGEMENT --- */
+
+extern m4_symbol *m4_symbol_token (const char *name, m4_data_t type,
+ m4_token *token,
+ m4_symbol *(*getter) (const char *name),
+ m4_symbol *(*setter) (m4_symbol *, m4_token *));
+
+extern void m4_macro_table_install (lt_dlhandle handle,
+ const m4_macro *table);
+extern void m4_builtin_table_install (lt_dlhandle handle,
+ const m4_builtin *table);
+
+extern const m4_builtin *m4_builtin_find_by_name (
+ const m4_builtin *, const char *);
+extern const m4_builtin *m4_builtin_find_by_func (
+ const m4_builtin *, m4_builtin_func *);
+
+#define m4_macro_pushdef(name, macro) \
+ m4_symbol_token ((name), M4_TOKEN_TEXT, (macro), \
+ m4_symbol_pushdef, m4_symbol_macro)
+#define m4_macro_define(name, macro) \
+ m4_symbol_token ((name), M4_TOKEN_TEXT, (macro), \
+ m4_symbol_define, m4_symbol_macro)
+#define m4_builtin_pushdef(name, builtin) \
+ m4_symbol_token ((name), M4_TOKEN_FUNC, (builtin), \
+ m4_symbol_pushdef, m4_symbol_builtin)
+#define m4_builtin_define(name, builtin) \
+ m4_symbol_token ((name), M4_TOKEN_FUNC, (builtin), \
+ m4_symbol_define, m4_symbol_builtin)
extern m4_token_t m4_token_type (m4_token *);
extern char *m4_token_text (m4_token *);
Index: m4/m4private.h
===================================================================
RCS file: /cvsroot/m4/m4/m4/m4private.h,v
retrieving revision 1.16
diff -u -p -u -r1.16 m4private.h
--- m4/m4private.h 4 Jun 2003 10:56:32 -0000 1.16
+++ m4/m4private.h 5 Jun 2003 16:10:19 -0000
@@ -41,10 +41,23 @@ struct m4_module_data {
m4_macro *mp; /* `m4_macro_table' address */
};
+struct m4_token_arg {
+ int index;
+ int flags;
+ char * default_val;
+};
+
+/* m4_token_arg.flags bit masks: */
+
+#define TOKEN_ARG_REST_BIT (1 << 0)
+#define TOKEN_ARG_KEY_BIT (1 << 1)
+
struct m4_token {
m4_token * next;
lt_dlhandle handle;
int flags;
+
+ m4_hash * arg_signature;
int min_args, max_args;
m4_data_t type;
@@ -57,6 +70,7 @@ struct m4_token {
#define TOKEN_NEXT(T) ((T)->next)
#define TOKEN_HANDLE(T) ((T)->handle)
#define TOKEN_FLAGS(T) ((T)->flags)
+#define TOKEN_ARG_SIGNATURE(T) ((T)->arg_signature)
#define TOKEN_MIN_ARGS(T) ((T)->min_args)
#define TOKEN_MAX_ARGS(T) ((T)->max_args)
#define TOKEN_TYPE(T) ((T)->type)
@@ -91,6 +105,7 @@ struct m4_symbol
#define SYMBOL_NEXT(S) (TOKEN_NEXT (SYMBOL_TOKEN (S)))
#define SYMBOL_HANDLE(S) (TOKEN_HANDLE (SYMBOL_TOKEN (S)))
#define SYMBOL_FLAGS(S) (TOKEN_FLAGS (SYMBOL_TOKEN (S)))
+#define SYMBOL_ARG_SIGNATURE(S) (TOKEN_ARG_SIGNATURE (SYMBOL_TOKEN (S)))
#define SYMBOL_MIN_ARGS(S) (TOKEN_MIN_ARGS (SYMBOL_TOKEN (S)))
#define SYMBOL_MAX_ARGS(S) (TOKEN_MAX_ARGS (SYMBOL_TOKEN (S)))
#define SYMBOL_TYPE(S) (TOKEN_TYPE (SYMBOL_TOKEN (S)))
Index: m4/symtab.c
===================================================================
RCS file: /cvsroot/m4/m4/m4/symtab.c,v
retrieving revision 1.29
diff -u -p -u -r1.29 symtab.c
--- m4/symtab.c 28 May 2002 21:46:37 -0000 1.29
+++ m4/symtab.c 5 Jun 2003 16:10:19 -0000
@@ -270,42 +270,49 @@ m4_symbol_delete (const char *name)
arguments. This function is usually passed a newly pushdef()d symbol
that is already interned in the symbol table. The traced bit should
be appropriately set by the caller. */
-void
-m4_symbol_builtin (m4_symbol *symbol, lt_dlhandle handle,
- m4_builtin_func *func, int flags,
- int min_args, int max_args)
+m4_symbol *
+m4_symbol_builtin (m4_symbol *symbol, m4_token *token)
{
assert (symbol);
- assert (handle);
- assert (func);
+ assert (token);
+ assert (TOKEN_FUNC (token));
+ assert (TOKEN_HANDLE (token));
+ assert (TOKEN_TYPE (token) == M4_TOKEN_FUNC);
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT)
xfree (SYMBOL_TEXT (symbol));
- SYMBOL_TYPE (symbol) = M4_TOKEN_FUNC;
- SYMBOL_FUNC (symbol) = func;
- SYMBOL_HANDLE (symbol) = handle;
- SYMBOL_FLAGS (symbol) = flags;
- SYMBOL_MIN_ARGS (symbol) = min_args;
- SYMBOL_MAX_ARGS (symbol) = max_args;
+ SYMBOL_TYPE (symbol) = TOKEN_TYPE (token);
+ SYMBOL_FUNC (symbol) = TOKEN_FUNC (token);
+ SYMBOL_HANDLE (symbol) = TOKEN_HANDLE (token);
+ SYMBOL_FLAGS (symbol) = TOKEN_FLAGS (token);
+ SYMBOL_ARG_SIGNATURE (symbol) = TOKEN_ARG_SIGNATURE (token);
+ SYMBOL_MIN_ARGS (symbol) = TOKEN_MIN_ARGS (token);
+ SYMBOL_MAX_ARGS (symbol) = TOKEN_MAX_ARGS (token);
+
+ return symbol;
}
/* ...and similarly for macro valued symbols. */
-void
-m4_symbol_macro (m4_symbol *symbol, lt_dlhandle handle,
- const char *text, int flags, int min_args, int max_args)
+m4_symbol *
+m4_symbol_macro (m4_symbol *symbol, m4_token *token)
{
assert (symbol);
+ assert (TOKEN_TEXT (token));
+ assert (TOKEN_TYPE (token) == M4_TOKEN_TEXT);
if (SYMBOL_TYPE (symbol) == M4_TOKEN_TEXT)
xfree (SYMBOL_TEXT (symbol));
- SYMBOL_TYPE (symbol) = M4_TOKEN_TEXT;
- SYMBOL_TEXT (symbol) = xstrdup (text);
- SYMBOL_HANDLE (symbol) = handle;
- SYMBOL_FLAGS (symbol) = flags;
- SYMBOL_MIN_ARGS (symbol) = min_args;
- SYMBOL_MAX_ARGS (symbol) = max_args;
+ SYMBOL_TYPE (symbol) = TOKEN_TYPE (token);
+ SYMBOL_TEXT (symbol) = xstrdup (TOKEN_TEXT (token));
+ SYMBOL_HANDLE (symbol) = TOKEN_HANDLE (token);
+ SYMBOL_FLAGS (symbol) = TOKEN_FLAGS (token);
+ SYMBOL_ARG_SIGNATURE (symbol) = TOKEN_ARG_SIGNATURE (token);
+ SYMBOL_MIN_ARGS (symbol) = TOKEN_MIN_ARGS (token);
+ SYMBOL_MAX_ARGS (symbol) = TOKEN_MAX_ARGS (token);
+
+ return symbol;
}
Index: modules/m4.c
===================================================================
RCS file: /cvsroot/m4/m4/modules/m4.c,v
retrieving revision 1.33
diff -u -p -u -r1.33 m4.c
--- modules/m4.c 4 Jun 2003 10:56:32 -0000 1.33
+++ modules/m4.c 5 Jun 2003 16:10:19 -0000
@@ -153,22 +153,18 @@ M4BUILTIN_HANDLER (define)
if (argc == 2)
{
- m4_macro_define (M4ARG (1), NULL, "", 0, 0, -1);
+ m4_macro_define (M4ARG (1), NULL);
return;
}
switch (TOKEN_TYPE (argv[2]))
{
case M4_TOKEN_TEXT:
- m4_macro_define (M4ARG (1), TOKEN_HANDLE (argv[2]),
- TOKEN_TEXT (argv[2]), TOKEN_FLAGS (argv[2]),
- TOKEN_MIN_ARGS (argv[2]), TOKEN_MAX_ARGS (argv[2]));
+ m4_macro_define (M4ARG (1), argv[2]);
return;
case M4_TOKEN_FUNC:
- m4_builtin_define (M4ARG (1), TOKEN_HANDLE (argv[2]),
- TOKEN_FUNC (argv[2]), TOKEN_FLAGS (argv[2]),
- TOKEN_MIN_ARGS (argv[2]), TOKEN_MAX_ARGS (argv[2]));
+ m4_builtin_define (M4ARG (1), argv[2]);
return;
}
@@ -192,22 +188,18 @@ M4BUILTIN_HANDLER (pushdef)
if (argc == 2)
{
- m4_macro_pushdef (M4ARG (1), NULL, "", 0, 0, -1);
+ m4_macro_pushdef (M4ARG (1), NULL);
return;
}
switch (TOKEN_TYPE (argv[2]))
{
case M4_TOKEN_TEXT:
- m4_macro_pushdef (M4ARG (1), TOKEN_HANDLE (argv[2]),
- TOKEN_TEXT (argv[2]), TOKEN_FLAGS (argv[2]),
- TOKEN_MIN_ARGS (argv[2]), TOKEN_MAX_ARGS (argv[2]));
+ m4_macro_pushdef (M4ARG (1), argv[2]);
return;
case M4_TOKEN_FUNC:
- m4_builtin_pushdef (M4ARG (1), TOKEN_HANDLE (argv[2]),
- TOKEN_FUNC (argv[2]), TOKEN_FLAGS (argv[2]),
- TOKEN_MIN_ARGS (argv[2]), TOKEN_MAX_ARGS (argv[2]));
+ m4_builtin_pushdef (M4ARG (1), argv[2]);
return;
}
Index: src/freeze.c
===================================================================
RCS file: /cvsroot/m4/m4/src/freeze.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 freeze.c
--- src/freeze.c 13 Oct 2001 08:56:48 -0000 1.22
+++ src/freeze.c 5 Jun 2003 16:10:20 -0000
@@ -473,6 +473,7 @@ reload_frozen_state (const char *name)
if (bp)
{
+ m4_token token;
int flags = 0;
if (bp->groks_macro_args)
@@ -480,8 +481,15 @@ reload_frozen_state (const char *name)
if (bp->blind_if_no_args)
BIT_SET (flags, TOKEN_BLIND_ARGS_BIT);
- m4_builtin_pushdef (string[0], handle, bp->func, flags,
- bp->min_args, bp->max_args);
+ bzero (&token, sizeof (m4_token));
+ TOKEN_TYPE (&token) = M4_TOKEN_FUNC;
+ TOKEN_FUNC (&token) = bp->func;
+ TOKEN_HANDLE (&token) = handle;
+ TOKEN_FLAGS (&token) = flags;
+ TOKEN_MIN_ARGS (&token) = bp->min_args;
+ TOKEN_MAX_ARGS (&token) = bp->max_args;
+
+ m4_builtin_pushdef (string[0], &token);
}
else
M4ERROR ((warning_status, 0,
@@ -650,6 +658,7 @@ reload_frozen_state (const char *name)
/* Enter a macro having an expansion text as a definition. */
{
+ m4_token token;
lt_dlhandle handle = 0;
if (number[2] > 0)
@@ -657,7 +666,13 @@ reload_frozen_state (const char *name)
if (strcmp (m4_module_name (handle), string[2]) == 0)
break;
- m4_macro_pushdef (string[0], handle, string[1], 0, 0, -1);
+ bzero (&token, sizeof (m4_token));
+ TOKEN_TYPE (&token) = M4_TOKEN_TEXT;
+ TOKEN_TEXT (&token) = string[1];
+ TOKEN_HANDLE (&token) = handle;
+ TOKEN_MAX_ARGS (&token) = -1;
+
+ m4_macro_pushdef (string[0], &token);
}
break;
Index: src/main.c
===================================================================
RCS file: /cvsroot/m4/m4/src/main.c,v
retrieving revision 1.34
diff -u -p -u -r1.34 main.c
--- src/main.c 30 May 2003 15:13:32 -0000 1.34
+++ src/main.c 5 Jun 2003 16:10:20 -0000
@@ -416,49 +416,56 @@ warranty; not even for MERCHANTABILITY o
/* Handle deferred command line macro definitions. Must come after
initialisation of the symbol table. */
+ {
+ m4_token token;
- defines = head;
+ bzero (&token, sizeof (token));
+ TOKEN_TYPE (&token) = M4_TOKEN_TEXT;
- while (defines != NULL)
- {
- macro_definition *next;
- char *macro_value;
- m4_symbol *symbol;
-
- switch (defines->code)
- {
- case 'D':
- macro_value = strchr (defines->macro, '=');
- if (macro_value == NULL)
- macro_value = "";
- else
- *macro_value++ = '\0';
- m4_macro_define (defines->macro, NULL, macro_value, 0x0, 0, -1);
- break;
-
- case 'U':
- m4_symbol_delete (defines->macro);
- break;
-
- case 't':
- symbol = m4_symbol_define (defines->macro);
- SYMBOL_TRACED (symbol) = TRUE;
- break;
-
- case 'm':
- m4_module_load (defines->macro, 0);
- break;
-
- default:
- M4ERROR ((warning_status, 0,
- "INTERNAL ERROR: Bad code in deferred arguments"));
- abort ();
- }
-
- next = defines->next;
- xfree ((void *) defines);
- defines = next;
- }
+ defines = head;
+
+ while (defines != NULL)
+ {
+ macro_definition *next;
+ char *macro_value;
+ m4_symbol *symbol;
+
+ switch (defines->code)
+ {
+ case 'D':
+ macro_value = strchr (defines->macro, '=');
+ if (macro_value == NULL)
+ macro_value = "";
+ else
+ *macro_value++ = '\0';
+ TOKEN_TEXT (&token) = macro_value;
+ m4_macro_define (defines->macro, &token);
+ break;
+
+ case 'U':
+ m4_symbol_delete (defines->macro);
+ break;
+
+ case 't':
+ symbol = m4_symbol_define (defines->macro);
+ SYMBOL_TRACED (symbol) = TRUE;
+ break;
+
+ case 'm':
+ m4_module_load (defines->macro, 0);
+ break;
+
+ default:
+ M4ERROR ((warning_status, 0,
+ "INTERNAL ERROR: Bad code in deferred arguments"));
+ abort ();
+ }
+
+ next = defines->next;
+ xfree ((void *) defines);
+ defines = next;
+ }
+ }
/* Interactive mode means unbuffered output, and interrupts ignored. */
- FYI: 4-gary-macro-formal-parameter-preparation.patch,
Gary V. Vaughan <=