/* misc constants */ enum { Eof = -1, False = 0, True = 1, Strsize = 512, Chunk = 512*1024, NADDR = (1<<0), NOUNBOX = (1<<1), Sdepth = 64, NDYHASH = 32, NPHASH = 32, Needed = 0, Made, }; typedef struct Node Node; typedef struct Sym Sym; typedef struct Type Type; typedef struct Tinfo Tinfo; typedef struct Jmps Jmps; typedef struct String String; typedef struct Hist Hist; typedef struct Tysym Tysym; typedef struct Stats Stats; typedef struct Tyrec Tyrec; typedef struct Altrec Altrec; typedef struct Dynt Dynt; struct Stats { int mem; int nodes; int types; }; struct Tysym { Sym *s; Type *t; }; struct Hist { Hist* link; char* name; long line; long offset; }; #define HISTSZ 20 #define H ((Hist*)0) struct Node { char type; char islval; char sun; char reg; Node* left; Node* right; Node* vlval; union { Node* init; Node* poly; Node* link; ulong atvsafe; char ireg; }; Type* t; Sym* sym; Tinfo* ti; int srcline; union { long pc; long ival; float fval; Node* proto; }; }; #define ZeroN ((Node*)0) struct String { Node n; int len; String *next; char *string; }; struct Dynt { ulong sig; Type* t; Node* n; Dynt* hash; }; /* Storage classes */ enum { Internal = 1, External, Global, Parameter, Automatic, Argument, Private, Dfile, /* Fake for output */ Adtdeflt, Newtype, /* Fake - always put last */ }; enum { TXXX, TINT, TUINT, TSINT, TSUINT, TCHAR, TFLOAT, TIND, TCHANNEL, TARRAY, TAGGREGATE, TUNION, TFUNC, TVOID, TADT, TPOLY, Ntype, }; enum { MINT = (1<