#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; schar 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, TDOT, NTYPE, TAUTO = NTYPE, TEXTERN, TSTATIC, TTYPEDEF, TTYPESTR, TREGISTER, TCONSTNT, TVOLATILE, TUNSIGNED, TSIGNED, 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 int hasdoubled;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 int ncontin;EXTERN int canreach;EXTERN int warnreach;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[];Lines 1–500 of 775. Load more
#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; schar 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, TDOT, NTYPE, TAUTO = NTYPE, TEXTERN, TSTATIC, TTYPEDEF, TTYPESTR, TREGISTER, TCONSTNT, TVOLATILE, TUNSIGNED, TSIGNED, 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 int hasdoubled; 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 int ncontin; EXTERN int canreach; EXTERN int warnreach; 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[];