xref: /inferno-os/utils/c2l/cc.h (revision 45a20ab721a513710138340faff3d59a31c3e01e)
174a4d8c2SCharles.Forsyth #include <lib9.h>
274a4d8c2SCharles.Forsyth #include <bio.h>
374a4d8c2SCharles.Forsyth #include <ctype.h>
474a4d8c2SCharles.Forsyth 
574a4d8c2SCharles.Forsyth #ifndef	EXTERN
674a4d8c2SCharles.Forsyth #define EXTERN	extern
774a4d8c2SCharles.Forsyth #endif
874a4d8c2SCharles.Forsyth 
974a4d8c2SCharles.Forsyth typedef	struct	Node	Node;
1074a4d8c2SCharles.Forsyth typedef	struct	Sym	Sym;
1174a4d8c2SCharles.Forsyth typedef	struct	Type	Type;
1274a4d8c2SCharles.Forsyth typedef	struct	Decl	Decl;
1374a4d8c2SCharles.Forsyth typedef	struct	Io	Io;
1474a4d8c2SCharles.Forsyth typedef	struct	Hist	Hist;
1574a4d8c2SCharles.Forsyth typedef	struct	Term	Term;
1674a4d8c2SCharles.Forsyth typedef	struct	Init	Init;
1774a4d8c2SCharles.Forsyth typedef	struct	Bits	Bits;
1874a4d8c2SCharles.Forsyth 
19*45a20ab7Sforsyth typedef	Rune	TRune;
20*45a20ab7Sforsyth 
2174a4d8c2SCharles.Forsyth #define	NHUNK		50000L
2274a4d8c2SCharles.Forsyth #define	BUFSIZ		8192
2374a4d8c2SCharles.Forsyth #define	NSYMB		500
2474a4d8c2SCharles.Forsyth #define	NHASH		1024
2574a4d8c2SCharles.Forsyth #define	STRINGSZ	200
2674a4d8c2SCharles.Forsyth #define	HISTSZ		20
2774a4d8c2SCharles.Forsyth #define YYMAXDEPTH	500
2874a4d8c2SCharles.Forsyth #define	NTERM		10
2974a4d8c2SCharles.Forsyth #define	MAXALIGN	7
3074a4d8c2SCharles.Forsyth 
31*45a20ab7Sforsyth #define	SIGN(n)		((uvlong)1<<(n-1))
3274a4d8c2SCharles.Forsyth #define	MASK(n)		(SIGN(n)|(SIGN(n)-1))
3374a4d8c2SCharles.Forsyth 
3474a4d8c2SCharles.Forsyth #define	BITS	5
3574a4d8c2SCharles.Forsyth #define	NVAR	(BITS*sizeof(ulong)*8)
3674a4d8c2SCharles.Forsyth struct	Bits
3774a4d8c2SCharles.Forsyth {
3874a4d8c2SCharles.Forsyth 	ulong	b[BITS];
3974a4d8c2SCharles.Forsyth };
4074a4d8c2SCharles.Forsyth 
4174a4d8c2SCharles.Forsyth EXTERN	int	lastnumbase;
4274a4d8c2SCharles.Forsyth 
4374a4d8c2SCharles.Forsyth #define KNIL	0
4474a4d8c2SCharles.Forsyth #define KCHR	1
4574a4d8c2SCharles.Forsyth #define KOCT	2
4674a4d8c2SCharles.Forsyth #define KDEC	3
4774a4d8c2SCharles.Forsyth #define KHEX	4
4874a4d8c2SCharles.Forsyth #define KEXP	5
4974a4d8c2SCharles.Forsyth #define KDROP	6
5074a4d8c2SCharles.Forsyth #define KLAST	7
5174a4d8c2SCharles.Forsyth 
5274a4d8c2SCharles.Forsyth struct	Node
5374a4d8c2SCharles.Forsyth {
5474a4d8c2SCharles.Forsyth 	Node*	left;
5574a4d8c2SCharles.Forsyth 	Node*	right;
5674a4d8c2SCharles.Forsyth 	double	fconst;		/* fp constant */
5774a4d8c2SCharles.Forsyth 	vlong	vconst;		/* non fp const */
5874a4d8c2SCharles.Forsyth 	char*	cstring;	/* character string */
59*45a20ab7Sforsyth 	Rune*	rstring;	/* rune string */
6074a4d8c2SCharles.Forsyth 
6174a4d8c2SCharles.Forsyth 	Sym*	sym;
6274a4d8c2SCharles.Forsyth 	Type*	type;
6374a4d8c2SCharles.Forsyth 	long	lineno;
6474a4d8c2SCharles.Forsyth 	char	op;
6574a4d8c2SCharles.Forsyth 	char	garb;
6674a4d8c2SCharles.Forsyth 	char kind;
6774a4d8c2SCharles.Forsyth 	char blk;
6874a4d8c2SCharles.Forsyth };
6974a4d8c2SCharles.Forsyth #define	Z	((Node*)0)
7074a4d8c2SCharles.Forsyth #define	ZZ	((Node*)-1)
7174a4d8c2SCharles.Forsyth 
7274a4d8c2SCharles.Forsyth struct	Sym
7374a4d8c2SCharles.Forsyth {
7474a4d8c2SCharles.Forsyth 	Sym*	link;
7574a4d8c2SCharles.Forsyth 	Type*	type;
7674a4d8c2SCharles.Forsyth 	Type*	suetag;
7774a4d8c2SCharles.Forsyth 	Type*	tenum;
7874a4d8c2SCharles.Forsyth 	char*	macro;
7974a4d8c2SCharles.Forsyth 	long	lineno;
8074a4d8c2SCharles.Forsyth 	long	offset;
8174a4d8c2SCharles.Forsyth 	vlong	vconst;
8274a4d8c2SCharles.Forsyth 	double	fconst;
8374a4d8c2SCharles.Forsyth 	Node*	nconst;
8474a4d8c2SCharles.Forsyth 	char*	cstring;
8574a4d8c2SCharles.Forsyth 	Node*	label;
8674a4d8c2SCharles.Forsyth 	char	*name;
8774a4d8c2SCharles.Forsyth 	char *lname;
8874a4d8c2SCharles.Forsyth 	char *mod;
8974a4d8c2SCharles.Forsyth 	ushort	lexical;
9074a4d8c2SCharles.Forsyth 	ushort	block;
9174a4d8c2SCharles.Forsyth 	ushort	sueblock;
9274a4d8c2SCharles.Forsyth 	char	class;
9374a4d8c2SCharles.Forsyth 	char kind;
9474a4d8c2SCharles.Forsyth 	char lkw;
9574a4d8c2SCharles.Forsyth 	char	args;
9674a4d8c2SCharles.Forsyth 	char	fd;
9774a4d8c2SCharles.Forsyth 	char limbo;
9874a4d8c2SCharles.Forsyth };
9974a4d8c2SCharles.Forsyth #define	S	((Sym*)0)
10074a4d8c2SCharles.Forsyth 
10174a4d8c2SCharles.Forsyth struct	Decl
10274a4d8c2SCharles.Forsyth {
10374a4d8c2SCharles.Forsyth 	Decl*	link;
10474a4d8c2SCharles.Forsyth 	Sym*	sym;
10574a4d8c2SCharles.Forsyth 	Type*	type;
10674a4d8c2SCharles.Forsyth 	long	offset;
10774a4d8c2SCharles.Forsyth 	long	lineno;
10874a4d8c2SCharles.Forsyth 	short	val;
10974a4d8c2SCharles.Forsyth 	ushort	block;
11074a4d8c2SCharles.Forsyth 	char	class;
11174a4d8c2SCharles.Forsyth };
11274a4d8c2SCharles.Forsyth #define	D	((Decl*)0)
11374a4d8c2SCharles.Forsyth 
11474a4d8c2SCharles.Forsyth struct	Type
11574a4d8c2SCharles.Forsyth {
11674a4d8c2SCharles.Forsyth 	Sym*	sym;
11774a4d8c2SCharles.Forsyth 	Sym*	tag;
11874a4d8c2SCharles.Forsyth 	Type*	link;
11974a4d8c2SCharles.Forsyth 	Type*	down;
12074a4d8c2SCharles.Forsyth 	Node*	nwidth;
12174a4d8c2SCharles.Forsyth 	long	width;
12274a4d8c2SCharles.Forsyth 	long	offset;
12374a4d8c2SCharles.Forsyth 	long	lineno;
12474a4d8c2SCharles.Forsyth 	char	shift;
12574a4d8c2SCharles.Forsyth 	char	nbits;
12674a4d8c2SCharles.Forsyth 	char	etype;
12774a4d8c2SCharles.Forsyth 	char	garb;
12874a4d8c2SCharles.Forsyth 	char vis;
12974a4d8c2SCharles.Forsyth 	char	mark;
13074a4d8c2SCharles.Forsyth };
13174a4d8c2SCharles.Forsyth #define	T	((Type*)0)
13274a4d8c2SCharles.Forsyth #define	NODECL	((void(*)(int, Type*, Sym*))0)
13374a4d8c2SCharles.Forsyth 
13474a4d8c2SCharles.Forsyth struct	Init			/* general purpose initialization */
13574a4d8c2SCharles.Forsyth {
13674a4d8c2SCharles.Forsyth 	int	code;
13774a4d8c2SCharles.Forsyth 	ulong	value;
13874a4d8c2SCharles.Forsyth 	char*	s;
13974a4d8c2SCharles.Forsyth };
14074a4d8c2SCharles.Forsyth 
14174a4d8c2SCharles.Forsyth EXTERN struct
14274a4d8c2SCharles.Forsyth {
14374a4d8c2SCharles.Forsyth 	char*	p;
14474a4d8c2SCharles.Forsyth 	int	c;
14574a4d8c2SCharles.Forsyth } fi;
14674a4d8c2SCharles.Forsyth 
14774a4d8c2SCharles.Forsyth struct	Io
14874a4d8c2SCharles.Forsyth {
14974a4d8c2SCharles.Forsyth 	Io*	link;
15074a4d8c2SCharles.Forsyth 	char*	p;
15174a4d8c2SCharles.Forsyth 	char	b[BUFSIZ];
15274a4d8c2SCharles.Forsyth 	short	c;
15374a4d8c2SCharles.Forsyth 	short	f;
15474a4d8c2SCharles.Forsyth };
15574a4d8c2SCharles.Forsyth #define	I	((Io*)0)
15674a4d8c2SCharles.Forsyth 
15774a4d8c2SCharles.Forsyth struct	Hist
15874a4d8c2SCharles.Forsyth {
15974a4d8c2SCharles.Forsyth 	Hist*	link;
16074a4d8c2SCharles.Forsyth 	char*	name;
16174a4d8c2SCharles.Forsyth 	long	line;
16274a4d8c2SCharles.Forsyth 	long	offset;
16374a4d8c2SCharles.Forsyth };
16474a4d8c2SCharles.Forsyth #define	H	((Hist*)0)
16574a4d8c2SCharles.Forsyth EXTERN Hist*	hist;
16674a4d8c2SCharles.Forsyth 
16774a4d8c2SCharles.Forsyth struct	Term
16874a4d8c2SCharles.Forsyth {
16974a4d8c2SCharles.Forsyth 	vlong	mult;
17074a4d8c2SCharles.Forsyth 	Node	*node;
17174a4d8c2SCharles.Forsyth };
17274a4d8c2SCharles.Forsyth 
17374a4d8c2SCharles.Forsyth enum
17474a4d8c2SCharles.Forsyth {
17574a4d8c2SCharles.Forsyth 	Axxx,
17674a4d8c2SCharles.Forsyth 	Ael1,
17774a4d8c2SCharles.Forsyth 	Ael2,
17874a4d8c2SCharles.Forsyth 	Asu2,
17974a4d8c2SCharles.Forsyth 	Aarg0,
18074a4d8c2SCharles.Forsyth 	Aarg1,
18174a4d8c2SCharles.Forsyth 	Aarg2,
18274a4d8c2SCharles.Forsyth 	Aaut3,
18374a4d8c2SCharles.Forsyth 	NALIGN,
18474a4d8c2SCharles.Forsyth };
18574a4d8c2SCharles.Forsyth 
18674a4d8c2SCharles.Forsyth enum				/* also in ../{8a,0a}.h */
18774a4d8c2SCharles.Forsyth {
18874a4d8c2SCharles.Forsyth 	Plan9	= 1<<0,
18974a4d8c2SCharles.Forsyth 	Unix	= 1<<1,
19074a4d8c2SCharles.Forsyth 	Windows	= 1<<2,
19174a4d8c2SCharles.Forsyth };
19274a4d8c2SCharles.Forsyth 
19374a4d8c2SCharles.Forsyth enum
19474a4d8c2SCharles.Forsyth {
19574a4d8c2SCharles.Forsyth 	DMARK,
19674a4d8c2SCharles.Forsyth 	DAUTO,
19774a4d8c2SCharles.Forsyth 	DSUE,
19874a4d8c2SCharles.Forsyth 	DLABEL,
19974a4d8c2SCharles.Forsyth };
20074a4d8c2SCharles.Forsyth enum
20174a4d8c2SCharles.Forsyth {
20274a4d8c2SCharles.Forsyth 	ONOOP,
20374a4d8c2SCharles.Forsyth 	OXXX,
20474a4d8c2SCharles.Forsyth 	OADD,
20574a4d8c2SCharles.Forsyth 	OADDR,
20674a4d8c2SCharles.Forsyth 	OAND,
20774a4d8c2SCharles.Forsyth 	OANDAND,
20874a4d8c2SCharles.Forsyth 	OARRAY,
20974a4d8c2SCharles.Forsyth 	OAS,
21074a4d8c2SCharles.Forsyth 	OASI,
21174a4d8c2SCharles.Forsyth 	OASADD,
21274a4d8c2SCharles.Forsyth 	OASAND,
21374a4d8c2SCharles.Forsyth 	OASASHL,
21474a4d8c2SCharles.Forsyth 	OASASHR,
21574a4d8c2SCharles.Forsyth 	OASDIV,
21674a4d8c2SCharles.Forsyth 	OASHL,
21774a4d8c2SCharles.Forsyth 	OASHR,
21874a4d8c2SCharles.Forsyth 	OASLDIV,
21974a4d8c2SCharles.Forsyth 	OASLMOD,
22074a4d8c2SCharles.Forsyth 	OASLMUL,
22174a4d8c2SCharles.Forsyth 	OASLSHR,
22274a4d8c2SCharles.Forsyth 	OASMOD,
22374a4d8c2SCharles.Forsyth 	OASMUL,
22474a4d8c2SCharles.Forsyth 	OASOR,
22574a4d8c2SCharles.Forsyth 	OASSUB,
22674a4d8c2SCharles.Forsyth 	OASXOR,
22774a4d8c2SCharles.Forsyth 	OBIT,
22874a4d8c2SCharles.Forsyth 	OBREAK,
22974a4d8c2SCharles.Forsyth 	OCASE,
23074a4d8c2SCharles.Forsyth 	OCAST,
23174a4d8c2SCharles.Forsyth 	OCOMMA,
23274a4d8c2SCharles.Forsyth 	OCOND,
23374a4d8c2SCharles.Forsyth 	OCONST,
23474a4d8c2SCharles.Forsyth 	OCONTINUE,
23574a4d8c2SCharles.Forsyth 	ODIV,
23674a4d8c2SCharles.Forsyth 	ODOT,
23774a4d8c2SCharles.Forsyth 	ODOTDOT,
23874a4d8c2SCharles.Forsyth 	ODWHILE,
23974a4d8c2SCharles.Forsyth 	OENUM,
24074a4d8c2SCharles.Forsyth 	OEQ,
24174a4d8c2SCharles.Forsyth 	OFOR,
24274a4d8c2SCharles.Forsyth 	OFUNC,
24374a4d8c2SCharles.Forsyth 	OGE,
24474a4d8c2SCharles.Forsyth 	OGOTO,
24574a4d8c2SCharles.Forsyth 	OGT,
24674a4d8c2SCharles.Forsyth 	OHI,
24774a4d8c2SCharles.Forsyth 	OHS,
24874a4d8c2SCharles.Forsyth 	OIF,
24974a4d8c2SCharles.Forsyth 	OIND,
25074a4d8c2SCharles.Forsyth 	OINDREG,
25174a4d8c2SCharles.Forsyth 	OINIT,
25274a4d8c2SCharles.Forsyth 	OLABEL,
25374a4d8c2SCharles.Forsyth 	OLDIV,
25474a4d8c2SCharles.Forsyth 	OLE,
25574a4d8c2SCharles.Forsyth 	OLIST,
25674a4d8c2SCharles.Forsyth 	OLMOD,
25774a4d8c2SCharles.Forsyth 	OLMUL,
25874a4d8c2SCharles.Forsyth 	OLO,
25974a4d8c2SCharles.Forsyth 	OLS,
26074a4d8c2SCharles.Forsyth 	OLSHR,
26174a4d8c2SCharles.Forsyth 	OLT,
26274a4d8c2SCharles.Forsyth 	OMOD,
26374a4d8c2SCharles.Forsyth 	OMUL,
26474a4d8c2SCharles.Forsyth 	ONAME,
26574a4d8c2SCharles.Forsyth 	ONE,
26674a4d8c2SCharles.Forsyth 	ONOT,
26774a4d8c2SCharles.Forsyth 	OOR,
26874a4d8c2SCharles.Forsyth 	OOROR,
26974a4d8c2SCharles.Forsyth 	OPOSTDEC,
27074a4d8c2SCharles.Forsyth 	OPOSTINC,
27174a4d8c2SCharles.Forsyth 	OPREDEC,
27274a4d8c2SCharles.Forsyth 	OPREINC,
27374a4d8c2SCharles.Forsyth 	OPROTO,
27474a4d8c2SCharles.Forsyth 	OREGISTER,
27574a4d8c2SCharles.Forsyth 	ORETURN,
27674a4d8c2SCharles.Forsyth 	OSET,
27774a4d8c2SCharles.Forsyth 	OSIGN,
27874a4d8c2SCharles.Forsyth 	OSIZE,
27974a4d8c2SCharles.Forsyth 	OSTRING,
28074a4d8c2SCharles.Forsyth 	OLSTRING,
28174a4d8c2SCharles.Forsyth 	OSTRUCT,
28274a4d8c2SCharles.Forsyth 	OSUB,
28374a4d8c2SCharles.Forsyth 	OSWITCH,
28474a4d8c2SCharles.Forsyth 	OUNION,
28574a4d8c2SCharles.Forsyth 	OUSED,
28674a4d8c2SCharles.Forsyth 	OWHILE,
28774a4d8c2SCharles.Forsyth 	OXOR,
28874a4d8c2SCharles.Forsyth 	ONEG,
28974a4d8c2SCharles.Forsyth 	OCOM,
29074a4d8c2SCharles.Forsyth 	OELEM,
29174a4d8c2SCharles.Forsyth 
29274a4d8c2SCharles.Forsyth 	OTST,		/* used in some compilers */
29374a4d8c2SCharles.Forsyth 	OINDEX,
29474a4d8c2SCharles.Forsyth 	OFAS,
29574a4d8c2SCharles.Forsyth 
29674a4d8c2SCharles.Forsyth 	OBLK,
29774a4d8c2SCharles.Forsyth 	OPOS,
29874a4d8c2SCharles.Forsyth 	ONUL,
29974a4d8c2SCharles.Forsyth 	ODOTIND,
30074a4d8c2SCharles.Forsyth 	OARRIND,
30174a4d8c2SCharles.Forsyth 	ODAS,
30274a4d8c2SCharles.Forsyth 	OASD,
30374a4d8c2SCharles.Forsyth 	OIOTA,
30474a4d8c2SCharles.Forsyth 	OLEN,
30574a4d8c2SCharles.Forsyth 	OBRACKET,
30674a4d8c2SCharles.Forsyth 	OREF,
30774a4d8c2SCharles.Forsyth 	OARRAYOF,
30874a4d8c2SCharles.Forsyth 	OSLICE,
30974a4d8c2SCharles.Forsyth 	OSADDR,
31074a4d8c2SCharles.Forsyth 	ONIL,
31174a4d8c2SCharles.Forsyth 	OS2AB,
31274a4d8c2SCharles.Forsyth 	OAB2S,
31374a4d8c2SCharles.Forsyth 	OFILDES,
31474a4d8c2SCharles.Forsyth 	OFD,
31574a4d8c2SCharles.Forsyth 	OTUPLE,
31674a4d8c2SCharles.Forsyth 	OT0,
31774a4d8c2SCharles.Forsyth 	ORETV,
31874a4d8c2SCharles.Forsyth 	OCAT,
31974a4d8c2SCharles.Forsyth 	OSBREAK,
32074a4d8c2SCharles.Forsyth 	OLDOT,
32174a4d8c2SCharles.Forsyth 	OMDOT,
32274a4d8c2SCharles.Forsyth 
32374a4d8c2SCharles.Forsyth 	OCODE,
32474a4d8c2SCharles.Forsyth 	ODECE,
32574a4d8c2SCharles.Forsyth 	ODECT,
32674a4d8c2SCharles.Forsyth 	ODECV,
32774a4d8c2SCharles.Forsyth 	ODECF,
32874a4d8c2SCharles.Forsyth 	OPUSH,
32974a4d8c2SCharles.Forsyth 	OPOP,
33074a4d8c2SCharles.Forsyth 
33174a4d8c2SCharles.Forsyth 	OEND
33274a4d8c2SCharles.Forsyth };
33374a4d8c2SCharles.Forsyth enum
33474a4d8c2SCharles.Forsyth {
33574a4d8c2SCharles.Forsyth 	TXXX,
33674a4d8c2SCharles.Forsyth 	TCHAR,
33774a4d8c2SCharles.Forsyth 	TUCHAR,
33874a4d8c2SCharles.Forsyth 	TSHORT,
33974a4d8c2SCharles.Forsyth 	TUSHORT,
34074a4d8c2SCharles.Forsyth 	TINT,
34174a4d8c2SCharles.Forsyth 	TUINT,
34274a4d8c2SCharles.Forsyth 	TLONG,
34374a4d8c2SCharles.Forsyth 	TULONG,
34474a4d8c2SCharles.Forsyth 	TVLONG,
34574a4d8c2SCharles.Forsyth 	TUVLONG,
34674a4d8c2SCharles.Forsyth 	TFLOAT,
34774a4d8c2SCharles.Forsyth 	TDOUBLE,
34874a4d8c2SCharles.Forsyth 	TIND,
34974a4d8c2SCharles.Forsyth 	TFUNC,
35074a4d8c2SCharles.Forsyth 	TARRAY,
35174a4d8c2SCharles.Forsyth 	TVOID,
35274a4d8c2SCharles.Forsyth 	TSTRUCT,
35374a4d8c2SCharles.Forsyth 	TUNION,
35474a4d8c2SCharles.Forsyth 	TENUM,
35574a4d8c2SCharles.Forsyth 	NTYPE,
35674a4d8c2SCharles.Forsyth 
35774a4d8c2SCharles.Forsyth 	TAUTO	= NTYPE,
35874a4d8c2SCharles.Forsyth 	TEXTERN,
35974a4d8c2SCharles.Forsyth 	TSTATIC,
36074a4d8c2SCharles.Forsyth 	TTYPEDEF,
36174a4d8c2SCharles.Forsyth 	TREGISTER,
36274a4d8c2SCharles.Forsyth 	TCONSTNT,
36374a4d8c2SCharles.Forsyth 	TVOLATILE,
36474a4d8c2SCharles.Forsyth 	TUNSIGNED,
36574a4d8c2SCharles.Forsyth 	TSIGNED,
36674a4d8c2SCharles.Forsyth 	TDOT,
36774a4d8c2SCharles.Forsyth 	TFILE,
36874a4d8c2SCharles.Forsyth 	TOLD,
36974a4d8c2SCharles.Forsyth 
37074a4d8c2SCharles.Forsyth 	TSTRING,
37174a4d8c2SCharles.Forsyth 	TFD,
37274a4d8c2SCharles.Forsyth 	TTUPLE,
37374a4d8c2SCharles.Forsyth 
37474a4d8c2SCharles.Forsyth 	NALLTYPES,
37574a4d8c2SCharles.Forsyth };
37674a4d8c2SCharles.Forsyth enum
37774a4d8c2SCharles.Forsyth {
37874a4d8c2SCharles.Forsyth 	CXXX,
37974a4d8c2SCharles.Forsyth 	CAUTO,
38074a4d8c2SCharles.Forsyth 	CEXTERN,
38174a4d8c2SCharles.Forsyth 	CGLOBL,
38274a4d8c2SCharles.Forsyth 	CSTATIC,
38374a4d8c2SCharles.Forsyth 	CLOCAL,
38474a4d8c2SCharles.Forsyth 	CTYPEDEF,
38574a4d8c2SCharles.Forsyth 	CPARAM,
38674a4d8c2SCharles.Forsyth 	CSELEM,
38774a4d8c2SCharles.Forsyth 	CLABEL,
38874a4d8c2SCharles.Forsyth 	CEXREG,
38974a4d8c2SCharles.Forsyth 	NCTYPES,
39074a4d8c2SCharles.Forsyth };
39174a4d8c2SCharles.Forsyth enum
39274a4d8c2SCharles.Forsyth {
39374a4d8c2SCharles.Forsyth 	GXXX		= 0,
39474a4d8c2SCharles.Forsyth 	GCONSTNT	= 1<<0,
39574a4d8c2SCharles.Forsyth 	GVOLATILE	= 1<<1,
39674a4d8c2SCharles.Forsyth 	NGTYPES		= 1<<2,
39774a4d8c2SCharles.Forsyth };
39874a4d8c2SCharles.Forsyth enum
39974a4d8c2SCharles.Forsyth {
40074a4d8c2SCharles.Forsyth 	BCHAR		= 1L<<TCHAR,
40174a4d8c2SCharles.Forsyth 	BUCHAR		= 1L<<TUCHAR,
40274a4d8c2SCharles.Forsyth 	BSHORT		= 1L<<TSHORT,
40374a4d8c2SCharles.Forsyth 	BUSHORT		= 1L<<TUSHORT,
40474a4d8c2SCharles.Forsyth 	BINT		= 1L<<TINT,
40574a4d8c2SCharles.Forsyth 	BUINT		= 1L<<TUINT,
40674a4d8c2SCharles.Forsyth 	BLONG		= 1L<<TLONG,
40774a4d8c2SCharles.Forsyth 	BULONG		= 1L<<TULONG,
40874a4d8c2SCharles.Forsyth 	BVLONG		= 1L<<TVLONG,
40974a4d8c2SCharles.Forsyth 	BUVLONG		= 1L<<TUVLONG,
41074a4d8c2SCharles.Forsyth 	BFLOAT		= 1L<<TFLOAT,
41174a4d8c2SCharles.Forsyth 	BDOUBLE		= 1L<<TDOUBLE,
41274a4d8c2SCharles.Forsyth 	BIND		= 1L<<TIND,
41374a4d8c2SCharles.Forsyth 	BFUNC		= 1L<<TFUNC,
41474a4d8c2SCharles.Forsyth 	BARRAY		= 1L<<TARRAY,
41574a4d8c2SCharles.Forsyth 	BVOID		= 1L<<TVOID,
41674a4d8c2SCharles.Forsyth 	BSTRUCT		= 1L<<TSTRUCT,
41774a4d8c2SCharles.Forsyth 	BUNION		= 1L<<TUNION,
41874a4d8c2SCharles.Forsyth 	BENUM		= 1L<<TENUM,
41974a4d8c2SCharles.Forsyth 	BFILE		= 1L<<TFILE,
42074a4d8c2SCharles.Forsyth 	BOLD		= 1L<<TOLD,
42174a4d8c2SCharles.Forsyth 	BDOT		= 1L<<TDOT,
42274a4d8c2SCharles.Forsyth 	BCONSTNT	= 1L<<TCONSTNT,
42374a4d8c2SCharles.Forsyth 	BVOLATILE	= 1L<<TVOLATILE,
42474a4d8c2SCharles.Forsyth 	BUNSIGNED	= 1L<<TUNSIGNED,
42574a4d8c2SCharles.Forsyth 	BSIGNED		= 1L<<TSIGNED,
42674a4d8c2SCharles.Forsyth 	BAUTO		= 1L<<TAUTO,
42774a4d8c2SCharles.Forsyth 	BEXTERN		= 1L<<TEXTERN,
42874a4d8c2SCharles.Forsyth 	BSTATIC		= 1L<<TSTATIC,
42974a4d8c2SCharles.Forsyth 	BTYPEDEF	= 1L<<TTYPEDEF,
43074a4d8c2SCharles.Forsyth 	BREGISTER	= 1L<<TREGISTER,
43174a4d8c2SCharles.Forsyth 
43274a4d8c2SCharles.Forsyth 	BINTEGER	= BCHAR|BUCHAR|BSHORT|BUSHORT|BINT|BUINT|
43374a4d8c2SCharles.Forsyth 				BLONG|BULONG|BVLONG|BUVLONG,
43474a4d8c2SCharles.Forsyth 	BNUMBER		= BINTEGER|BFLOAT|BDOUBLE,
43574a4d8c2SCharles.Forsyth 
43674a4d8c2SCharles.Forsyth /* these can be overloaded with complex types */
43774a4d8c2SCharles.Forsyth 
43874a4d8c2SCharles.Forsyth 	BCLASS		= BAUTO|BEXTERN|BSTATIC|BTYPEDEF|BREGISTER,
43974a4d8c2SCharles.Forsyth 
44074a4d8c2SCharles.Forsyth 	BGARB		= BCONSTNT|BVOLATILE,
44174a4d8c2SCharles.Forsyth };
44274a4d8c2SCharles.Forsyth 
44374a4d8c2SCharles.Forsyth EXTERN struct
44474a4d8c2SCharles.Forsyth {
44574a4d8c2SCharles.Forsyth 	Type*	tenum;		/* type of entire enum */
44674a4d8c2SCharles.Forsyth 	Type*	cenum;		/* type of current enum run */
44774a4d8c2SCharles.Forsyth 	vlong	lastenum;	/* value of current enum */
44874a4d8c2SCharles.Forsyth 	double	floatenum;	/* value of current enum */
44974a4d8c2SCharles.Forsyth } en;
45074a4d8c2SCharles.Forsyth 
45174a4d8c2SCharles.Forsyth EXTERN	int	autobn;
45274a4d8c2SCharles.Forsyth EXTERN	long	autoffset;
45374a4d8c2SCharles.Forsyth EXTERN	int	blockno;
45474a4d8c2SCharles.Forsyth EXTERN	int	comm;
45574a4d8c2SCharles.Forsyth EXTERN	Decl*	dclstack;
45674a4d8c2SCharles.Forsyth EXTERN	int	doaddr;
45774a4d8c2SCharles.Forsyth EXTERN	int	doalladdr;
45874a4d8c2SCharles.Forsyth EXTERN	int	doinc;
45974a4d8c2SCharles.Forsyth EXTERN	int	doloc;
46074a4d8c2SCharles.Forsyth EXTERN	int	domod;
46174a4d8c2SCharles.Forsyth EXTERN	Hist*	ehist;
46274a4d8c2SCharles.Forsyth EXTERN	long	firstbit;
46374a4d8c2SCharles.Forsyth EXTERN	Decl*	firstdcl;
46474a4d8c2SCharles.Forsyth EXTERN	int	fperror;
46574a4d8c2SCharles.Forsyth EXTERN	Sym*	hash[NHASH];
46674a4d8c2SCharles.Forsyth EXTERN	char*	hunk;
46774a4d8c2SCharles.Forsyth EXTERN	char*	include[20];
46874a4d8c2SCharles.Forsyth EXTERN	Type*	fdtype;
46974a4d8c2SCharles.Forsyth EXTERN	int	inmain;
47074a4d8c2SCharles.Forsyth EXTERN	Io*	iofree;
47174a4d8c2SCharles.Forsyth EXTERN	Io*	ionext;
47274a4d8c2SCharles.Forsyth EXTERN	Io*	iostack;
47374a4d8c2SCharles.Forsyth EXTERN	int	justcode;
47474a4d8c2SCharles.Forsyth EXTERN	long	lastbit;
47574a4d8c2SCharles.Forsyth EXTERN	char	lastclass;
47674a4d8c2SCharles.Forsyth EXTERN	Type*	lastdcl;
47774a4d8c2SCharles.Forsyth EXTERN	long	lastfield;
47874a4d8c2SCharles.Forsyth EXTERN	Type*	lasttype;
47974a4d8c2SCharles.Forsyth EXTERN	long	lineno;
48074a4d8c2SCharles.Forsyth EXTERN	long	nearln;
48174a4d8c2SCharles.Forsyth EXTERN	int	nerrors;
48274a4d8c2SCharles.Forsyth EXTERN	int	newflag;
48374a4d8c2SCharles.Forsyth EXTERN	long	nhunk;
48474a4d8c2SCharles.Forsyth EXTERN	int	ninclude;
48574a4d8c2SCharles.Forsyth EXTERN	Node*	nodproto;
48674a4d8c2SCharles.Forsyth EXTERN	Node*	nodcast;
48774a4d8c2SCharles.Forsyth EXTERN	int	passes;
48874a4d8c2SCharles.Forsyth EXTERN	char*	pathname;
48974a4d8c2SCharles.Forsyth EXTERN	int	peekc;
49074a4d8c2SCharles.Forsyth EXTERN	Type*	pfdtype;
49174a4d8c2SCharles.Forsyth EXTERN	long	pline;
49274a4d8c2SCharles.Forsyth EXTERN	long	saveline;
49374a4d8c2SCharles.Forsyth EXTERN	Type*	strf;
49474a4d8c2SCharles.Forsyth EXTERN	int	strings;
49574a4d8c2SCharles.Forsyth EXTERN	Type*	stringtype;
49674a4d8c2SCharles.Forsyth EXTERN	Type*	strl;
49774a4d8c2SCharles.Forsyth EXTERN	char	symb[NSYMB];
49874a4d8c2SCharles.Forsyth EXTERN	Sym*	symstring;
49974a4d8c2SCharles.Forsyth EXTERN	int	taggen;
50074a4d8c2SCharles.Forsyth EXTERN	Type*	tfield;
50174a4d8c2SCharles.Forsyth EXTERN	Type*	tufield;
50274a4d8c2SCharles.Forsyth EXTERN	int	thechar;
50374a4d8c2SCharles.Forsyth EXTERN	char*	thestring;
50474a4d8c2SCharles.Forsyth EXTERN	Type*	thisfn;
50574a4d8c2SCharles.Forsyth EXTERN	long	thunk;
50674a4d8c2SCharles.Forsyth EXTERN	Type*	types[NTYPE];
50774a4d8c2SCharles.Forsyth EXTERN	Node*	initlist;
50874a4d8c2SCharles.Forsyth EXTERN	int	nterm;
50974a4d8c2SCharles.Forsyth EXTERN	int	hjdickflg;
51074a4d8c2SCharles.Forsyth EXTERN	int	fproundflg;
51174a4d8c2SCharles.Forsyth EXTERN	Bits	zbits;
51274a4d8c2SCharles.Forsyth 
51374a4d8c2SCharles.Forsyth extern	char	*onames[], *tnames[], *gnames[];
51474a4d8c2SCharles.Forsyth extern	char	*cnames[], *qnames[], *bnames[];
51574a4d8c2SCharles.Forsyth extern	char	tab[NTYPE][NTYPE];
51674a4d8c2SCharles.Forsyth extern	char	comrel[], invrel[], logrel[];
51774a4d8c2SCharles.Forsyth extern	long	ncast[], tadd[], tand[];
51874a4d8c2SCharles.Forsyth extern	long	targ[], tasadd[], tasign[], tcast[];
51974a4d8c2SCharles.Forsyth extern	long	tdot[], tfunct[], tindir[], tmul[];
52074a4d8c2SCharles.Forsyth extern	long	tnot[], trel[], tsub[];
52174a4d8c2SCharles.Forsyth 
52274a4d8c2SCharles.Forsyth extern	char	typeaf[];
52374a4d8c2SCharles.Forsyth extern	char	typefd[];
52474a4d8c2SCharles.Forsyth extern	char	typei[];
52574a4d8c2SCharles.Forsyth extern	char	typesu[];
52674a4d8c2SCharles.Forsyth extern	char	typesuv[];
52774a4d8c2SCharles.Forsyth extern	char	typeu[];
52874a4d8c2SCharles.Forsyth extern	char	typev[];
52974a4d8c2SCharles.Forsyth extern	char	typec[];
53074a4d8c2SCharles.Forsyth extern	char	typeh[];
53174a4d8c2SCharles.Forsyth extern	char	typeil[];
53274a4d8c2SCharles.Forsyth extern	char	typeilp[];
53374a4d8c2SCharles.Forsyth extern	char	typechl[];
53474a4d8c2SCharles.Forsyth extern	char	typechlp[];
53574a4d8c2SCharles.Forsyth extern	char	typechlpfd[];
53674a4d8c2SCharles.Forsyth 
53774a4d8c2SCharles.Forsyth extern	ulong	thash1;
53874a4d8c2SCharles.Forsyth extern	ulong	thash2;
53974a4d8c2SCharles.Forsyth extern	ulong	thash3;
54074a4d8c2SCharles.Forsyth extern	ulong	thash[];
54174a4d8c2SCharles.Forsyth 
54274a4d8c2SCharles.Forsyth /*
54374a4d8c2SCharles.Forsyth  *	Inferno.c/Posix.c/Nt.c
54474a4d8c2SCharles.Forsyth  */
54574a4d8c2SCharles.Forsyth int	mywait(int*);
54674a4d8c2SCharles.Forsyth int	mycreat(char*, int);
54774a4d8c2SCharles.Forsyth int	systemtype(int);
54874a4d8c2SCharles.Forsyth int	pathchar(void);
54974a4d8c2SCharles.Forsyth char*	mygetwd(char*, int);
55074a4d8c2SCharles.Forsyth int	myexec(char*, char*[]);
55174a4d8c2SCharles.Forsyth int	mydup(int, int);
55274a4d8c2SCharles.Forsyth int	myfork(void);
55374a4d8c2SCharles.Forsyth int	mypipe(int*);
55474a4d8c2SCharles.Forsyth void*	mysbrk(ulong);
55574a4d8c2SCharles.Forsyth 
55674a4d8c2SCharles.Forsyth /*
55774a4d8c2SCharles.Forsyth  *	parser
55874a4d8c2SCharles.Forsyth  */
55974a4d8c2SCharles.Forsyth int	yyparse(void);
56074a4d8c2SCharles.Forsyth int	mpatof(char*, double*);
56174a4d8c2SCharles.Forsyth int	mpatov(char*, vlong*);
56274a4d8c2SCharles.Forsyth 
56374a4d8c2SCharles.Forsyth /*
56474a4d8c2SCharles.Forsyth  *	lex.c
56574a4d8c2SCharles.Forsyth  */
56674a4d8c2SCharles.Forsyth void*	allocn(void*, long, long);
56774a4d8c2SCharles.Forsyth void*	alloc(long);
56874a4d8c2SCharles.Forsyth void	cinit(void);
56974a4d8c2SCharles.Forsyth int	compile(char*, char**, int);
57074a4d8c2SCharles.Forsyth void	errorexit(void);
57174a4d8c2SCharles.Forsyth int	filbuf(void);
57274a4d8c2SCharles.Forsyth int	getc(void);
57374a4d8c2SCharles.Forsyth long	getr(void);
57474a4d8c2SCharles.Forsyth int	getnsc(void);
57574a4d8c2SCharles.Forsyth Sym*	lookup(void);
57674a4d8c2SCharles.Forsyth void	main(int, char*[]);
57774a4d8c2SCharles.Forsyth void	newfile(char*, int);
57874a4d8c2SCharles.Forsyth void	newio(void);
57974a4d8c2SCharles.Forsyth void	outbegin(char *);
58074a4d8c2SCharles.Forsyth void	outend(void);
58174a4d8c2SCharles.Forsyth void	outfun(Node*);
58274a4d8c2SCharles.Forsyth void	pushio(void);
58374a4d8c2SCharles.Forsyth long	escchar(long, int, int);
58474a4d8c2SCharles.Forsyth Sym*	slookup(char*);
58574a4d8c2SCharles.Forsyth void	syminit(Sym*);
58674a4d8c2SCharles.Forsyth void	unget(int);
58774a4d8c2SCharles.Forsyth long	yylex(void);
58874a4d8c2SCharles.Forsyth int	Lconv(Fmt*);
58974a4d8c2SCharles.Forsyth int	Tconv(Fmt*);
59074a4d8c2SCharles.Forsyth int	FNconv(Fmt*);
59174a4d8c2SCharles.Forsyth int	Oconv(Fmt*);
59274a4d8c2SCharles.Forsyth int	Qconv(Fmt*);
59374a4d8c2SCharles.Forsyth int	VBconv(Fmt*);
59474a4d8c2SCharles.Forsyth void	setinclude(char*);
59574a4d8c2SCharles.Forsyth 
59674a4d8c2SCharles.Forsyth /*
59774a4d8c2SCharles.Forsyth  * mac.c
59874a4d8c2SCharles.Forsyth  */
59974a4d8c2SCharles.Forsyth void	dodefine(char*);
60074a4d8c2SCharles.Forsyth void	domacro(void);
60174a4d8c2SCharles.Forsyth Sym*	getsym(void);
60274a4d8c2SCharles.Forsyth long	getnsn(void);
60374a4d8c2SCharles.Forsyth void	linehist(char*, int);
60474a4d8c2SCharles.Forsyth void	macdef(void);
60574a4d8c2SCharles.Forsyth void	macprag(void);
60674a4d8c2SCharles.Forsyth void	macend(void);
60774a4d8c2SCharles.Forsyth void	macexpand(Sym*, char*);
60874a4d8c2SCharles.Forsyth void	macif(int);
60974a4d8c2SCharles.Forsyth void	macinc(void);
61074a4d8c2SCharles.Forsyth void	maclin(void);
61174a4d8c2SCharles.Forsyth void	macund(void);
61274a4d8c2SCharles.Forsyth 
61374a4d8c2SCharles.Forsyth /*
61474a4d8c2SCharles.Forsyth  * dcl.c
61574a4d8c2SCharles.Forsyth  */
61674a4d8c2SCharles.Forsyth Node*	doinit(Sym*, Type*, long, Node*);
61774a4d8c2SCharles.Forsyth Type*	tcopy(Type*);
61874a4d8c2SCharles.Forsyth void	init1(Sym*, Type*, long, int);
61974a4d8c2SCharles.Forsyth Node*	newlist(Node*, Node*);
62074a4d8c2SCharles.Forsyth void	adecl(int, Type*, Sym*);
62174a4d8c2SCharles.Forsyth int	anyproto(Node*);
62274a4d8c2SCharles.Forsyth void	argmark(Node*, int);
62374a4d8c2SCharles.Forsyth void	dbgdecl(Sym*);
62474a4d8c2SCharles.Forsyth Node*	dcllabel(Sym*, int);
62574a4d8c2SCharles.Forsyth Node*	dodecl(void(*)(int, Type*, Sym*), int, Type*, Node*, int);
62674a4d8c2SCharles.Forsyth Sym*	mkstatic(Sym*);
62774a4d8c2SCharles.Forsyth void	doenum(Sym*, Node*);
62874a4d8c2SCharles.Forsyth void	snap(Type*);
62974a4d8c2SCharles.Forsyth Type*	dotag(Sym*, int, int);
63074a4d8c2SCharles.Forsyth void	edecl(int, Type*, Sym*);
63174a4d8c2SCharles.Forsyth Type*	fnproto(Node*);
63274a4d8c2SCharles.Forsyth Type*	fnproto1(Node*);
63374a4d8c2SCharles.Forsyth void	markdcl(void);
63474a4d8c2SCharles.Forsyth Type*	paramconv(Type*, int);
63574a4d8c2SCharles.Forsyth void	pdecl(int, Type*, Sym*);
63674a4d8c2SCharles.Forsyth Decl*	push(void);
63774a4d8c2SCharles.Forsyth Decl*	push1(Sym*);
63874a4d8c2SCharles.Forsyth Node*	revertdcl(void);
6396e425a9dSCharles.Forsyth #undef round
64074a4d8c2SCharles.Forsyth #define	round	ccround
64174a4d8c2SCharles.Forsyth long	round(long, int);
64274a4d8c2SCharles.Forsyth int	rsametype(Type*, Type*, int, int);
64374a4d8c2SCharles.Forsyth int	sametype(Type*, Type*);
64474a4d8c2SCharles.Forsyth ulong	signature(Type*, int);
64574a4d8c2SCharles.Forsyth void	suallign(Type*);
64674a4d8c2SCharles.Forsyth void	tmerge(Type*, Sym*);
64774a4d8c2SCharles.Forsyth void	walkparam(Node*, int);
64874a4d8c2SCharles.Forsyth void	xdecl(int, Type*, Sym*);
64974a4d8c2SCharles.Forsyth Node*	contig(Sym*, Node*, long);
65074a4d8c2SCharles.Forsyth 
65174a4d8c2SCharles.Forsyth /*
65274a4d8c2SCharles.Forsyth  * com.c
65374a4d8c2SCharles.Forsyth  */
65474a4d8c2SCharles.Forsyth void	ccom(Node*);
65574a4d8c2SCharles.Forsyth void	complex(Node*);
65674a4d8c2SCharles.Forsyth int	tcom(Node*);
65774a4d8c2SCharles.Forsyth int	tcoma(Node*, Node*, Type*, int);
65874a4d8c2SCharles.Forsyth int	tcomd(Node*, Type*);
65974a4d8c2SCharles.Forsyth int	tcomo(Node*, int);
66074a4d8c2SCharles.Forsyth int	tcomx(Node*);
66174a4d8c2SCharles.Forsyth int	tlvalue(Node*);
66274a4d8c2SCharles.Forsyth void	constas(Node*, Type*, Type*);
66374a4d8c2SCharles.Forsyth 
66474a4d8c2SCharles.Forsyth /*
66574a4d8c2SCharles.Forsyth  * con.c
66674a4d8c2SCharles.Forsyth  */
66774a4d8c2SCharles.Forsyth void	acom(Node*);
66874a4d8c2SCharles.Forsyth void	acom1(vlong, Node*);
66974a4d8c2SCharles.Forsyth void	acom2(Node*, Type*);
670*45a20ab7Sforsyth int	acomcmp1(void*, void*);
671*45a20ab7Sforsyth int	acomcmp2(void*, void*);
67274a4d8c2SCharles.Forsyth int	addo(Node*);
67374a4d8c2SCharles.Forsyth void	evconst(Node*);
67474a4d8c2SCharles.Forsyth 
67574a4d8c2SCharles.Forsyth /*
67674a4d8c2SCharles.Forsyth  * sub.c
67774a4d8c2SCharles.Forsyth  */
67874a4d8c2SCharles.Forsyth void	arith(Node*, int);
67974a4d8c2SCharles.Forsyth Type*	dotsearch(Sym*, Type*, Node*);
68074a4d8c2SCharles.Forsyth long	dotoffset(Type*, Type*, Node*);
68174a4d8c2SCharles.Forsyth void	gethunk(void);
68274a4d8c2SCharles.Forsyth Node*	invert(Node*);
68374a4d8c2SCharles.Forsyth int	bitno(long);
68474a4d8c2SCharles.Forsyth void	makedot(Node*, Type*, long);
68574a4d8c2SCharles.Forsyth Node*	new(int, Node*, Node*);
68674a4d8c2SCharles.Forsyth Node*	new1(int, Node*, Node*);
68774a4d8c2SCharles.Forsyth int	nilcast(Type*, Type*);
68874a4d8c2SCharles.Forsyth int	nocast(Type*, Type*);
68974a4d8c2SCharles.Forsyth void	prtree(Node*, char*);
69074a4d8c2SCharles.Forsyth void	prtree1(Node*, int, int);
69174a4d8c2SCharles.Forsyth void	relcon(Node*, Node*);
69274a4d8c2SCharles.Forsyth int	relindex(int);
69374a4d8c2SCharles.Forsyth int	simpleg(long);
69474a4d8c2SCharles.Forsyth Type*	garbt(Type*, long);
69574a4d8c2SCharles.Forsyth int	simplec(long);
69674a4d8c2SCharles.Forsyth Type*	simplet(long);
69774a4d8c2SCharles.Forsyth int	stcompat(Node*, Type*, Type*, long[]);
69874a4d8c2SCharles.Forsyth int	tcompat(Node*, Type*, Type*, long[]);
69974a4d8c2SCharles.Forsyth void	tinit(void);
70074a4d8c2SCharles.Forsyth Type*	typ(int, Type*);
70174a4d8c2SCharles.Forsyth Type*	typ1(int, Type*);
70274a4d8c2SCharles.Forsyth void	typeext(Type*, Node*);
70374a4d8c2SCharles.Forsyth void	typeext1(Type*, Node*);
70474a4d8c2SCharles.Forsyth int	side(Node*);
70574a4d8c2SCharles.Forsyth int	vconst(Node*);
70674a4d8c2SCharles.Forsyth int	vlog(Node*);
70774a4d8c2SCharles.Forsyth int	topbit(ulong);
70874a4d8c2SCharles.Forsyth long	typebitor(long, long);
70974a4d8c2SCharles.Forsyth void	diag(Node*, char*, ...);
71074a4d8c2SCharles.Forsyth void	warn(Node*, char*, ...);
71174a4d8c2SCharles.Forsyth void	yyerror(char*, ...);
71274a4d8c2SCharles.Forsyth void	fatal(Node*, char*, ...);
71374a4d8c2SCharles.Forsyth 
71474a4d8c2SCharles.Forsyth /*
71574a4d8c2SCharles.Forsyth  * acid.c
71674a4d8c2SCharles.Forsyth  */
71774a4d8c2SCharles.Forsyth void	acidtype(Type*);
71874a4d8c2SCharles.Forsyth void	acidvar(Sym*);
71974a4d8c2SCharles.Forsyth 
72074a4d8c2SCharles.Forsyth /*
72174a4d8c2SCharles.Forsyth  * bits.c
72274a4d8c2SCharles.Forsyth  */
72374a4d8c2SCharles.Forsyth Bits	bor(Bits, Bits);
72474a4d8c2SCharles.Forsyth Bits	band(Bits, Bits);
72574a4d8c2SCharles.Forsyth Bits	bnot(Bits);
72674a4d8c2SCharles.Forsyth int	bany(Bits*);
72774a4d8c2SCharles.Forsyth int	bnum(Bits);
72874a4d8c2SCharles.Forsyth Bits	blsh(uint);
72974a4d8c2SCharles.Forsyth int	beq(Bits, Bits);
73074a4d8c2SCharles.Forsyth int	bset(Bits, uint);
73174a4d8c2SCharles.Forsyth 
73274a4d8c2SCharles.Forsyth /*
73374a4d8c2SCharles.Forsyth  * dpchk.c
73474a4d8c2SCharles.Forsyth  */
73574a4d8c2SCharles.Forsyth void	dpcheck(Node*);
73674a4d8c2SCharles.Forsyth void	arginit(void);
73774a4d8c2SCharles.Forsyth void	pragvararg(void);
73874a4d8c2SCharles.Forsyth void	praghjdicks(void);
73974a4d8c2SCharles.Forsyth void	pragfpround(void);
74074a4d8c2SCharles.Forsyth 
74174a4d8c2SCharles.Forsyth /*
74274a4d8c2SCharles.Forsyth  * calls to machine depend part
74374a4d8c2SCharles.Forsyth  */
74474a4d8c2SCharles.Forsyth void	codgen(Node*, Node*, int);
74574a4d8c2SCharles.Forsyth void	gclean(void);
74674a4d8c2SCharles.Forsyth void	gextern(Sym*, Node*, long, long);
74774a4d8c2SCharles.Forsyth void	ginit(void);
74874a4d8c2SCharles.Forsyth long	outstring(char*, long);
749*45a20ab7Sforsyth long	outlstring(Rune*, long);
75074a4d8c2SCharles.Forsyth void	sextern(Sym*, Node*, long, long);
75174a4d8c2SCharles.Forsyth void	xcom(Node*);
75274a4d8c2SCharles.Forsyth long	exreg(Type*);
75374a4d8c2SCharles.Forsyth long	align(long, Type*, int);
75474a4d8c2SCharles.Forsyth long	maxround(long, long);
75574a4d8c2SCharles.Forsyth 
75674a4d8c2SCharles.Forsyth extern	schar	ewidth[];
75774a4d8c2SCharles.Forsyth 
75874a4d8c2SCharles.Forsyth /*
75974a4d8c2SCharles.Forsyth  * com64
76074a4d8c2SCharles.Forsyth  */
76174a4d8c2SCharles.Forsyth int	com64(Node*);
76274a4d8c2SCharles.Forsyth void	com64init(void);
76374a4d8c2SCharles.Forsyth void	bool64(Node*);
76474a4d8c2SCharles.Forsyth double	convvtof(vlong);
76574a4d8c2SCharles.Forsyth vlong	convftov(double);
76674a4d8c2SCharles.Forsyth double	convftox(double, int);
76774a4d8c2SCharles.Forsyth vlong	convvtox(vlong, int);
76874a4d8c2SCharles.Forsyth 
76974a4d8c2SCharles.Forsyth #pragma	varargck	argpos	warn	2
77074a4d8c2SCharles.Forsyth #pragma	varargck	argpos	diag	2
77174a4d8c2SCharles.Forsyth #pragma	varargck	argpos	yyerror	1
77274a4d8c2SCharles.Forsyth 
77374a4d8c2SCharles.Forsyth #pragma	varargck	type	"F"	Node*
77474a4d8c2SCharles.Forsyth #pragma	varargck	type	"L"	long
77574a4d8c2SCharles.Forsyth #pragma	varargck	type	"Q"	long
77674a4d8c2SCharles.Forsyth #pragma	varargck	type	"O"	int
77774a4d8c2SCharles.Forsyth #pragma	varargck	type	"T"	Type*
77874a4d8c2SCharles.Forsyth #pragma	varargck	type	"|"	int
77974a4d8c2SCharles.Forsyth 
78074a4d8c2SCharles.Forsyth /* output routines */
78174a4d8c2SCharles.Forsyth 
78274a4d8c2SCharles.Forsyth void prline(char*);
78374a4d8c2SCharles.Forsyth void prstr(char *);
784*45a20ab7Sforsyth void prlstr(Rune *);
78574a4d8c2SCharles.Forsyth void prkeywd(char *);
78674a4d8c2SCharles.Forsyth void prid(char *);
78774a4d8c2SCharles.Forsyth void	prsym(Sym*, int);
78874a4d8c2SCharles.Forsyth void	prsym0(Sym*);
78974a4d8c2SCharles.Forsyth void prdelim(char *);
79074a4d8c2SCharles.Forsyth void prchar(vlong);
79174a4d8c2SCharles.Forsyth void prreal(double, char*, int);
79274a4d8c2SCharles.Forsyth void prnum(vlong, int, Type*);
79374a4d8c2SCharles.Forsyth void	prcom(char *, Node*);
79474a4d8c2SCharles.Forsyth void newline(void);
79574a4d8c2SCharles.Forsyth void incind(void);
79674a4d8c2SCharles.Forsyth void decind(void);
79774a4d8c2SCharles.Forsyth int	zeroind(void);
79874a4d8c2SCharles.Forsyth void	restoreind(int);
79974a4d8c2SCharles.Forsyth void startcom(int);
80074a4d8c2SCharles.Forsyth void	addcom(int);
80174a4d8c2SCharles.Forsyth void	endcom(void);
80274a4d8c2SCharles.Forsyth int	outcom(int);
80374a4d8c2SCharles.Forsyth int	arrow(Sym*);
80474a4d8c2SCharles.Forsyth 
80574a4d8c2SCharles.Forsyth /* limbo generating routines */
80674a4d8c2SCharles.Forsyth 
80774a4d8c2SCharles.Forsyth void pgen(int);
80874a4d8c2SCharles.Forsyth void epgen(int);
80974a4d8c2SCharles.Forsyth void ttgen(Type*);
81074a4d8c2SCharles.Forsyth void vtgen(Node*);
81174a4d8c2SCharles.Forsyth void etgen(Sym*);
81274a4d8c2SCharles.Forsyth void expgen(Node*);
81374a4d8c2SCharles.Forsyth 
81474a4d8c2SCharles.Forsyth /* -m routines */
81574a4d8c2SCharles.Forsyth 
81674a4d8c2SCharles.Forsyth void	newsec(int);
81774a4d8c2SCharles.Forsyth 
81874a4d8c2SCharles.Forsyth void outpush(char*);
81974a4d8c2SCharles.Forsyth void outpop(int);
82074a4d8c2SCharles.Forsyth void outpush0(char*, Node*);
82174a4d8c2SCharles.Forsyth void outpop0(int);
82274a4d8c2SCharles.Forsyth void outpush2(char*, Node*);
82374a4d8c2SCharles.Forsyth void outpop2(int);
82474a4d8c2SCharles.Forsyth char*	outmod(char*, int);
82574a4d8c2SCharles.Forsyth 
82674a4d8c2SCharles.Forsyth /* miscellaneous */
82774a4d8c2SCharles.Forsyth 
82874a4d8c2SCharles.Forsyth int iscon(char*);
82974a4d8c2SCharles.Forsyth Node* ncopy(Node*);
83074a4d8c2SCharles.Forsyth void doasenum(Sym*);
83174a4d8c2SCharles.Forsyth Type *maxtype(Type*, Type*);
83274a4d8c2SCharles.Forsyth 
83374a4d8c2SCharles.Forsyth void	linit(void);
83474a4d8c2SCharles.Forsyth void	sysinit(void);
83574a4d8c2SCharles.Forsyth 
83674a4d8c2SCharles.Forsyth int ism(void);
83774a4d8c2SCharles.Forsyth int isb(void);
83874a4d8c2SCharles.Forsyth int dolog(void);
83974a4d8c2SCharles.Forsyth 
84074a4d8c2SCharles.Forsyth int line(Node*);
84174a4d8c2SCharles.Forsyth 
84274a4d8c2SCharles.Forsyth void	output(long, int);
84374a4d8c2SCharles.Forsyth void usemod(Sym*, int);
84474a4d8c2SCharles.Forsyth void setmod(Sym*);
84574a4d8c2SCharles.Forsyth 
84674a4d8c2SCharles.Forsyth int	exists(char*);
84774a4d8c2SCharles.Forsyth int	isconsym(Sym *);
84874a4d8c2SCharles.Forsyth 
84974a4d8c2SCharles.Forsyth void clbegin(void);
85074a4d8c2SCharles.Forsyth void clend(void);
85174a4d8c2SCharles.Forsyth 
85274a4d8c2SCharles.Forsyth int gfltconv(Fmt*);
853