Charles.Forsyth20061220965a0ca19 years agoHistory
850 lines · 13.0 KB · C
RawDownload
#include <lib9.h>#include <bio.h>#include <ctype.h> #ifndef	EXTERN#define EXTERN	extern#endif typedef	struct	Node	Node;typedef	struct	Sym	Sym;typedef	struct	Type	Type;typedef	struct	Decl	Decl;typedef	struct	Io	Io;typedef	struct	Hist	Hist;typedef	struct	Term	Term;typedef	struct	Init	Init;typedef	struct	Bits	Bits; #define	NHUNK		50000L#define	BUFSIZ		8192#define	NSYMB		500#define	NHASH		1024#define	STRINGSZ	200#define	HISTSZ		20#define YYMAXDEPTH	500#define	NTERM		10#define	MAXALIGN	7 #define	SIGN(n)		((vlong)1<<(n-1))#define	MASK(n)		(SIGN(n)|(SIGN(n)-1)) #define	BITS	5#define	NVAR	(BITS*sizeof(ulong)*8)struct	Bits{	ulong	b[BITS];}; EXTERN	int	lastnumbase; #define KNIL	0#define KCHR	1#define KOCT	2#define KDEC	3#define KHEX	4#define KEXP	5#define KDROP	6#define KLAST	7 struct	Node{	Node*	left;	Node*	right;	double	fconst;		/* fp constant */	vlong	vconst;		/* non fp const */	char*	cstring;	/* character string */	ushort*	rstring;	/* rune string */ 	Sym*	sym;	Type*	type;	long	lineno;	char	op;	char	garb;	char kind;	char blk;};#define	Z	((Node*)0)#define	ZZ	((Node*)-1) struct	Sym{	Sym*	link;	Type*	type;	Type*	suetag;	Type*	tenum;	char*	macro;	long	lineno;	long	offset;	vlong	vconst;	double	fconst;	Node*	nconst;	char*	cstring;	Node*	label;	char	*name;	char *lname;	char *mod;	ushort	lexical;	ushort	block;	ushort	sueblock;	char	class;	char kind;	char lkw;	char	args;	char	fd;	char limbo;};#define	S	((Sym*)0) struct	Decl{	Decl*	link;	Sym*	sym;	Type*	type;	long	offset;	long	lineno;	short	val;	ushort	block;	char	class;};#define	D	((Decl*)0) struct	Type{	Sym*	sym;	Sym*	tag;	Type*	link;	Type*	down;	Node*	nwidth;	long	width;	long	offset;	long	lineno;	char	shift;	char	nbits;	char	etype;	char	garb;	char vis;	char	mark;};#define	T	((Type*)0)#define	NODECL	((void(*)(int, Type*, Sym*))0) struct	Init			/* general purpose initialization */{	int	code;	ulong	value;	char*	s;}; EXTERN struct{	char*	p;	int	c;} fi; struct	Io{	Io*	link;	char*	p;	char	b[BUFSIZ];	short	c;	short	f;};#define	I	((Io*)0) struct	Hist{	Hist*	link;	char*	name;	long	line;	long	offset;};#define	H	((Hist*)0)EXTERN Hist*	hist; struct	Term{	vlong	mult;	Node	*node;}; enum{	Axxx,	Ael1,	Ael2,	Asu2,	Aarg0,	Aarg1,	Aarg2,	Aaut3,	NALIGN,}; enum				/* also in ../{8a,0a}.h */{	Plan9	= 1<<0,	Unix	= 1<<1,	Windows	= 1<<2,}; enum{	DMARK,	DAUTO,	DSUE,	DLABEL,};enum{	ONOOP,	OXXX,	OADD,	OADDR,	OAND,	OANDAND,	OARRAY,	OAS,	OASI,	OASADD,	OASAND,	OASASHL,	OASASHR,	OASDIV,	OASHL,	OASHR,	OASLDIV,	OASLMOD,	OASLMUL,	OASLSHR,	OASMOD,	OASMUL,	OASOR,	OASSUB,	OASXOR,	OBIT,	OBREAK,	OCASE,	OCAST,	OCOMMA,	OCOND,	OCONST,	OCONTINUE,	ODIV,	ODOT,	ODOTDOT,	ODWHILE,	OENUM,	OEQ,	OFOR,	OFUNC,	OGE,	OGOTO,	OGT,	OHI,	OHS,	OIF,	OIND,	OINDREG,	OINIT,	OLABEL,	OLDIV,	OLE,	OLIST,	OLMOD,	OLMUL,	OLO,	OLS,	OLSHR,	OLT,	OMOD,	OMUL,	ONAME,	ONE,	ONOT,	OOR,	OOROR,	OPOSTDEC,	OPOSTINC,	OPREDEC,	OPREINC,	OPROTO,	OREGISTER,	ORETURN,	OSET,	OSIGN,	OSIZE,	OSTRING,	OLSTRING,	OSTRUCT,	OSUB,	OSWITCH,	OUNION,	OUSED,	OWHILE,	OXOR,	ONEG,	OCOM,	OELEM, 	OTST,		/* used in some compilers */	OINDEX,	OFAS, 	OBLK,	OPOS,	ONUL,	ODOTIND,	OARRIND,	ODAS,	OASD,	OIOTA,	OLEN,	OBRACKET,	OREF,	OARRAYOF,	OSLICE,	OSADDR,	ONIL,	OS2AB,	OAB2S,	OFILDES,	OFD,	OTUPLE,	OT0,	ORETV,	OCAT,	OSBREAK,	OLDOT,	OMDOT, 	OCODE,	ODECE,	ODECT,	ODECV,	ODECF,	OPUSH,	OPOP, 	OEND};enum{	TXXX,	TCHAR,	TUCHAR,	TSHORT,	TUSHORT,	TINT,	TUINT,	TLONG,	TULONG,	TVLONG,	TUVLONG,	TFLOAT,	TDOUBLE,	TIND,	TFUNC,	TARRAY,	TVOID,	TSTRUCT,	TUNION,	TENUM,	NTYPE, 	TAUTO	= NTYPE,	TEXTERN,	TSTATIC,	TTYPEDEF,	TREGISTER,	TCONSTNT,	TVOLATILE,	TUNSIGNED,	TSIGNED,	TDOT,	TFILE,	TOLD, 	TSTRING,	TFD,	TTUPLE, 	NALLTYPES,};enum{	CXXX,	CAUTO,	CEXTERN,	CGLOBL,	CSTATIC,	CLOCAL,	CTYPEDEF,	CPARAM,	CSELEM,	CLABEL,	CEXREG,	NCTYPES,};enum{	GXXX		= 0,	GCONSTNT	= 1<<0,	GVOLATILE	= 1<<1,	NGTYPES		= 1<<2,};enum{	BCHAR		= 1L<<TCHAR,	BUCHAR		= 1L<<TUCHAR,	BSHORT		= 1L<<TSHORT,	BUSHORT		= 1L<<TUSHORT,	BINT		= 1L<<TINT,	BUINT		= 1L<<TUINT,	BLONG		= 1L<<TLONG,	BULONG		= 1L<<TULONG,	BVLONG		= 1L<<TVLONG,	BUVLONG		= 1L<<TUVLONG,	BFLOAT		= 1L<<TFLOAT,	BDOUBLE		= 1L<<TDOUBLE,	BIND		= 1L<<TIND,	BFUNC		= 1L<<TFUNC,	BARRAY		= 1L<<TARRAY,	BVOID		= 1L<<TVOID,	BSTRUCT		= 1L<<TSTRUCT,	BUNION		= 1L<<TUNION,	BENUM		= 1L<<TENUM,	BFILE		= 1L<<TFILE,	BOLD		= 1L<<TOLD,	BDOT		= 1L<<TDOT,	BCONSTNT	= 1L<<TCONSTNT,	BVOLATILE	= 1L<<TVOLATILE,	BUNSIGNED	= 1L<<TUNSIGNED,	BSIGNED		= 1L<<TSIGNED,	BAUTO		= 1L<<TAUTO,	BEXTERN		= 1L<<TEXTERN,	BSTATIC		= 1L<<TSTATIC,	BTYPEDEF	= 1L<<TTYPEDEF,	BREGISTER	= 1L<<TREGISTER, 	BINTEGER	= BCHAR|BUCHAR|BSHORT|BUSHORT|BINT|BUINT|				BLONG|BULONG|BVLONG|BUVLONG,	BNUMBER		= BINTEGER|BFLOAT|BDOUBLE, /* these can be overloaded with complex types */ 	BCLASS		= BAUTO|BEXTERN|BSTATIC|BTYPEDEF|BREGISTER, 	BGARB		= BCONSTNT|BVOLATILE,}; EXTERN struct{	Type*	tenum;		/* type of entire enum */	Type*	cenum;		/* type of current enum run */	vlong	lastenum;	/* value of current enum */	double	floatenum;	/* value of current enum */} en; EXTERN	int	autobn;EXTERN	long	autoffset;EXTERN	int	blockno;EXTERN	int	comm;EXTERN	Decl*	dclstack;EXTERN	int	doaddr;EXTERN	int	doalladdr;EXTERN	int	doinc;EXTERN	int	doloc;EXTERN	int	domod;EXTERN	Hist*	ehist;EXTERN	long	firstbit;EXTERN	Decl*	firstdcl;EXTERN	int	fperror;EXTERN	Sym*	hash[NHASH];EXTERN	char*	hunk;EXTERN	char*	include[20];EXTERN	Type*	fdtype;EXTERN	int	inmain;EXTERN	Io*	iofree;EXTERN	Io*	ionext;EXTERN	Io*	iostack;EXTERN	int	justcode;EXTERN	long	lastbit;EXTERN	char	lastclass;EXTERN	Type*	lastdcl;EXTERN	long	lastfield;EXTERN	Type*	lasttype;EXTERN	long	lineno;EXTERN	long	nearln;EXTERN	int	nerrors;EXTERN	int	newflag;EXTERN	long	nhunk;EXTERN	int	ninclude;EXTERN	Node*	nodproto;EXTERN	Node*	nodcast;EXTERN	int	passes;EXTERN	char*	pathname;EXTERN	int	peekc;EXTERN	Type*	pfdtype;EXTERN	long	pline;EXTERN	long	saveline;EXTERN	Type*	strf;EXTERN	int	strings;EXTERN	Type*	stringtype;EXTERN	Type*	strl;EXTERN	char	symb[NSYMB];EXTERN	Sym*	symstring;EXTERN	int	taggen;EXTERN	Type*	tfield;EXTERN	Type*	tufield;EXTERN	int	thechar;

Lines 1–500 of 850.