Charles.Forsyth20060303644188019 years agoHistory
768 lines · 11.9 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	Funct	Funct;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];}; struct	Node{	Node*	left;	Node*	right;	void*	label;	long	pc;	int	reg;	long	xoffset;	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	oldop;	char	xcast;	char	class;	char	etype;	char	complex;	char	addable;	char	scale;	char	garb;};#define	Z	((Node*)0) struct	Sym{	Sym*	link;	Type*	type;	Type*	suetag;	Type*	tenum;	char*	macro;	long	varlineno;	long	offset;	vlong	vconst;	double	fconst;	Node*	label;	ushort	lexical;	char	*name;	ushort	block;	ushort	sueblock;	char	class;	char	sym;	char	aused;	char	sig;};#define	S	((Sym*)0) enum{	SIGNONE = 0,	SIGDONE = 1,	SIGINTERN = 2, 	SIGNINTERN = 1729*325*1729,}; struct	Decl{	Decl*	link;	Sym*	sym;	Type*	type;	long	varlineno;	long	offset;	short	val;	ushort	block;	char	class;	char	aused;};#define	D	((Decl*)0) struct	Type{	Sym*	sym;	Sym*	tag;	Funct*	funct;	Type*	link;	Type*	down;	long	width;	long	offset;	long	lineno;	char	shift;	char	nbits;	char	etype;	char	garb;}; #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{	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,	OPOS,	OELEM, 	OTST,		/* used in some compilers */	OINDEX,	OFAS,	OREGPAIR, 	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,	TTYPESTR,	TREGISTER,	TCONSTNT,	TVOLATILE,	TUNSIGNED,	TSIGNED,	TDOT,	TFILE,	TOLD,	NALLTYPES,};enum{	CXXX,	CAUTO,	CEXTERN,	CGLOBL,	CSTATIC,	CLOCAL,	CTYPEDEF,	CTYPESTR,	CPARAM,	CSELEM,	CLABEL,	CEXREG,	NCTYPES,};enum{	GXXX		= 0,	GCONSTNT	= 1<<0,	GVOLATILE	= 1<<1,	NGTYPES		= 1<<2, 	GINCOMPLETE	= 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,	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,	BTYPESTR	= 1L<<TTYPESTR,	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|BTYPESTR|BREGISTER,	BGARB		= BCONSTNT|BVOLATILE,}; struct	Funct{	Sym*	sym[OEND];	Sym*	castto[NTYPE];	Sym*	castfr[NTYPE];}; 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	Decl*	dclstack;EXTERN	char	debug[256];EXTERN	Hist*	ehist;EXTERN	long	firstbit;EXTERN	Sym*	firstarg;EXTERN	Type*	firstargtype;EXTERN	Decl*	firstdcl;EXTERN	int	fperror;EXTERN	Sym*	hash[NHASH];EXTERN	char*	hunk;EXTERN	char*	include[20];EXTERN	Io*	iofree;EXTERN	Io*	ionext;EXTERN	Io*	iostack;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	Biobuf	outbuf;EXTERN	Biobuf	diagbuf;EXTERN	char*	outfile;EXTERN	char*	pathname;EXTERN	int	peekc;EXTERN	long	stkoff;EXTERN	Type*	strf;EXTERN	Type*	strl;EXTERN	char	symb[NSYMB];EXTERN	Sym*	symstring;EXTERN	int	taggen;EXTERN	Type*	tfield;EXTERN	Type*	tufield;EXTERN	int	thechar;EXTERN	char*	thestring;EXTERN	Type*	thisfn;EXTERN	long	thunk;EXTERN	Type*	types[NTYPE];EXTERN	Type*	fntypes[NTYPE];EXTERN	Node*	initlist;EXTERN	Term	term[NTERM];EXTERN	int	nterm;EXTERN	int	packflg;EXTERN	int	fproundflg;EXTERN	int	profileflg;EXTERN	Bits	zbits; extern	char	*onames[], *tnames[], *gnames[];extern	char	*cnames[], *qnames[], *bnames[];extern	char	tab[NTYPE][NTYPE];extern	char	comrel[], invrel[], logrel[];extern	long	ncast[], tadd[], tand[];extern	long	targ[], tasadd[], tasign[], tcast[];extern	long	tdot[], tfunct[], tindir[], tmul[];extern	long	tnot[], trel[], tsub[]; extern	char	typeaf[];extern	char	typefd[];extern	char	typei[];extern	char	typesu[];extern	char	typesuv[];extern	char	typeu[];extern	char	typev[];extern	char	typec[];extern	char	typeh[];extern	char	typeil[];extern	char	typeilp[];extern	char	typechl[];extern	char	typechlv[];extern	char	typechlvp[];

Lines 1–500 of 768.