123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- /* $Id$ */
- /* DEFINITIONS FOR THE MACRO REPLACEMENT ROUTINES */
- struct repl {
- struct repl *next;
- struct idf *r_idf; /* name of the macro */
- struct args *r_args; /* replacement parameters */
- int r_level; /* level of insertion */
- int r_size; /* current size of replacement buffer */
- char *r_ptr; /* replacement text index pointer */
- char *r_text; /* replacement text */
- };
- /* ALLOCDEF "repl" 4 */
- #define NO_REPL (struct repl *)0
- /* The implementation of the ## operator is currently very clumsy.
- When the the ## operator is used the arguments are taken from
- the raw buffer; this buffer contains a precise copy of the
- original argument. The fully expanded copy is in the arg buffer.
- The two copies are here explicitely because:
- #define ABC f()
- #define ABCD 2
- #define g(x, y) x ## y + h(x)
- g(ABC, D); // gives: 2 + h(f())
- In this case we need two copies: one raw copy for the pasting
- operator, and an expanded one as argument for h().
- */
- struct args {
- char *a_expptr; /* expanded argument index pointer */
- char *a_expbuf; /* expanded argument buffer pointer */
- int a_expsize; /* current size of expanded buffer */
- char *a_expvec[NPARAMS]; /* expanded argument vector */
- char *a_rawptr; /* raw argument index pointer */
- char *a_rawbuf; /* raw argument buffer pointer */
- int a_rawsize; /* current size of raw buffer */
- char *a_rawvec[NPARAMS]; /* raw argument vector */
- };
- /* ALLOCDEF "args" 2 */
- #define NO_ARGS (struct args *)0
|