m4: Sync with FreeBSD.
[dragonfly.git] / usr.bin / m4 / mdef.h
CommitLineData
4afad3d8 1/* $OpenBSD: mdef.h,v 1.31 2011/09/27 07:24:02 espie Exp $ */
984263bc
MD
2/* $NetBSD: mdef.h,v 1.7 1996/01/13 23:25:27 pk Exp $ */
3
4/*
5 * Copyright (c) 1989, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Ozan Yigit at York University.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
4afad3d8 19 * 3. Neither the name of the University nor the names of its contributors
984263bc
MD
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * @(#)mdef.h 8.1 (Berkeley) 6/6/93
4afad3d8 36 * $FreeBSD: src/usr.bin/m4/mdef.h,v 1.13 2012/11/17 01:54:24 svnexp Exp $
984263bc
MD
37 */
38
39#define MACRTYPE 1
40#define DEFITYPE 2
41#define EXPRTYPE 3
42#define SUBSTYPE 4
43#define IFELTYPE 5
44#define LENGTYPE 6
45#define CHNQTYPE 7
46#define SYSCTYPE 8
47#define UNDFTYPE 9
48#define INCLTYPE 10
49#define SINCTYPE 11
50#define PASTTYPE 12
51#define SPASTYPE 13
52#define INCRTYPE 14
53#define IFDFTYPE 15
54#define PUSDTYPE 16
55#define POPDTYPE 17
56#define SHIFTYPE 18
57#define DECRTYPE 19
58#define DIVRTYPE 20
59#define UNDVTYPE 21
60#define DIVNTYPE 22
61#define MKTMTYPE 23
62#define ERRPTYPE 24
63#define M4WRTYPE 25
64#define TRNLTYPE 26
65#define DNLNTYPE 27
66#define DUMPTYPE 28
67#define CHNCTYPE 29
68#define INDXTYPE 30
69#define SYSVTYPE 31
70#define EXITTYPE 32
71#define DEFNTYPE 33
72#define SELFTYPE 34
73#define INDIRTYPE 35
74#define BUILTINTYPE 36
75#define PATSTYPE 37
76#define FILENAMETYPE 38
77#define LINETYPE 39
78#define REGEXPTYPE 40
79#define ESYSCMDTYPE 41
80#define TRACEONTYPE 42
81#define TRACEOFFTYPE 43
4afad3d8 82#define FORMATTYPE 44
984263bc 83
4afad3d8 84#define BUILTIN_MARKER "__builtin_"
10c3f15b 85
984263bc
MD
86#define TYPEMASK 63 /* Keep bits really corresponding to a type. */
87#define RECDEF 256 /* Pure recursive def, don't expand it */
88#define NOARGS 512 /* builtin needs no args */
89#define NEEDARGS 1024 /* mark builtin that need args with this */
90
91/*
92 * m4 special characters
93 */
10c3f15b 94
984263bc
MD
95#define ARGFLAG '$'
96#define LPAREN '('
97#define RPAREN ')'
98#define LQUOTE '`'
99#define RQUOTE '\''
100#define COMMA ','
101#define SCOMMT '#'
102#define ECOMMT '\n'
103
104#ifdef msdos
105#define system(str) (-1)
106#endif
107
108/*
109 * other important constants
110 */
111
112#define EOS '\0'
4afad3d8
PA
113#define MAXINP 10 /* maximum include files */
114#define MAXOUT 10 /* maximum # of diversions */
984263bc 115#define BUFSIZE 4096 /* starting size of pushback buffer */
4afad3d8 116#define INITSTACKMAX 4096 /* starting size of call stack */
984263bc 117#define STRSPMAX 4096 /* starting size of string space */
4afad3d8 118#define MAXTOK 512 /* maximum chars in a tokn */
984263bc 119#define MAXCCHARS 5 /* max size of comment/quote delim */
10c3f15b 120
984263bc
MD
121#define ALL 1
122#define TOP 0
10c3f15b 123
984263bc
MD
124#define TRUE 1
125#define FALSE 0
984263bc
MD
126
127/*
128 * m4 data structures
129 */
10c3f15b 130
984263bc 131typedef struct ndblock *ndptr;
10c3f15b 132
4afad3d8
PA
133struct macro_definition {
134 struct macro_definition *next;
984263bc
MD
135 char *defn; /* definition.. */
136 unsigned int type; /* type of the entry.. */
984263bc 137};
10c3f15b 138
10c3f15b 139
4afad3d8
PA
140struct ndblock { /* hashtable structure */
141 unsigned int builtin_type;
142 unsigned int trace_flags;
143 struct macro_definition *d;
144 char name[1]; /* entry name.. */
984263bc
MD
145};
146
147typedef union { /* stack structure */
148 int sfra; /* frame entry */
4afad3d8 149 char *sstr; /* string entry */
984263bc
MD
150} stae;
151
152struct input_file {
4afad3d8
PA
153 FILE *file;
154 char *name;
155 unsigned long lineno;
156 unsigned long synch_lineno; /* used for -s */
157 int c;
984263bc
MD
158};
159
160#define CURRENT_NAME (infile[ilevel].name)
161#define CURRENT_LINE (infile[ilevel].lineno)
162/*
163 * macros for readibility and/or speed
164 *
4afad3d8 165 * gpbc() - get a possibly pushed-back character
984263bc
MD
166 * pushf() - push a call frame entry onto stack
167 * pushs() - push a string pointer onto stack
168 */
4afad3d8
PA
169#define gpbc() (bp > bufbase) ? *--bp : obtain_char(infile+ilevel)
170#define pushf(x) \
171 do { \
172 if (++sp == (int)STACKMAX) \
173 enlarge_stack();\
174 mstack[sp].sfra = (x); \
175 sstack[sp] = 0; \
984263bc
MD
176 } while (0)
177
4afad3d8
PA
178#define pushs(x) \
179 do { \
180 if (++sp == (int)STACKMAX) \
181 enlarge_stack();\
182 mstack[sp].sstr = (x); \
183 sstack[sp] = 1; \
984263bc
MD
184 } while (0)
185
4afad3d8
PA
186#define pushs1(x) \
187 do { \
188 if (++sp == (int)STACKMAX) \
189 enlarge_stack();\
190 mstack[sp].sstr = (x); \
191 sstack[sp] = 0; \
984263bc
MD
192 } while (0)
193
194/*
195 * . .
196 * | . | <-- sp | . |
197 * +-------+ +-----+
198 * | arg 3 ----------------------->| str |
199 * +-------+ | . |
4afad3d8 200 * | arg 2 ---PREVEP-----+ .
984263bc
MD
201 * +-------+ |
202 * . | | |
4afad3d8 203 * +-------+ | +-----+
984263bc
MD
204 * | plev | PARLEV +-------->| str |
205 * +-------+ | . |
206 * | type | CALTYP .
207 * +-------+
208 * | prcf ---PREVFP--+
4afad3d8 209 * +-------+ |
984263bc 210 * | . | PREVSP |
4afad3d8 211 * . |
984263bc
MD
212 * +-------+ |
213 * | <----------+
214 * +-------+
215 *
216 */
217#define PARLEV (mstack[fp].sfra)
4afad3d8
PA
218#define CALTYP (mstack[fp - 2].sfra)
219#define TRACESTATUS (mstack[fp - 1].sfra)
220#define PREVEP (mstack[fp + 3].sstr)
221#define PREVSP (fp - 4)
222#define PREVFP (mstack[fp - 3].sfra)