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