Initial revision
This commit is contained in:
48
lang/cem/cpp.ansi/replace.str
Normal file
48
lang/cem/cpp.ansi/replace.str
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
/* $Header$ */
|
||||
/* 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 */
|
||||
char *r_ptr; /* replacement text pointer */
|
||||
char r_text[LAPBUF]; /* 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);
|
||||
|
||||
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 pointer */
|
||||
char *a_expvec[NPARAMS]; /* expanded argument vector */
|
||||
char a_expbuf[ARGBUF]; /* expanded argument buffer space */
|
||||
char *a_rawptr; /* raw argument pointer */
|
||||
char *a_rawvec[NPARAMS]; /* raw argument vector */
|
||||
char a_rawbuf[ARGBUF]; /* raw argument buffer space */
|
||||
};
|
||||
|
||||
/* ALLOCDEF "args" 2 */
|
||||
|
||||
#define NO_ARGS (struct args *)0
|
||||
|
||||
Reference in New Issue
Block a user