#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. 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 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;