ref: c2086cda32afb3960938a81df6f5a6a209bfaf33
dir: /dat.h/
typedef struct Nod Nod; typedef struct Nlst Nlst; typedef struct Typ Typ; typedef struct Loc Loc; #define ZL (Nlst){nil, 0, 0} struct Typ { int t; char linear; char *name; Typ *base; Typ **args; int nargs; Nod *size; }; struct Nlst { Nod **v; int nv; int cap; }; struct Loc { int line; char *file; }; enum { Tunkn, Tvoid, Tchar, Tuchar, Tshort, Tushort, Tlong, Tulong, Tvlong, Tuvlong, Tarray, Tslice, Tfunc, Tstruct, }; enum { Nexpr, Nif, Nfor, Niter, Nblk, Nlit, Nsym, Ndcl, Nfunc, Ncall, }; enum { Olit, Ovar, Oasn, Oadd, Osub, Omul, Odiv, Omod, Oshl, Oshr, Olor, Oland, Ogt, Olt, Oge, Ole, Oeq, One, Oinc, Odec, Orcv, }; struct Nod { int t; Loc loc; union { struct { int nsub; Nod *sub; } top; struct { int op; Nod *lhs; Nod *rhs; Typ *type; } expr; struct { Nod *idx; Nod *arg; Nod *body; } iter; struct { Nod *init; Nod *cond; Nod *step; Nod *body; } nfor; struct { Nod *cond; Nod *t; Nod *f; } nif; struct { vlong val; } lit; struct { char *sym; } sym; struct { char *name; Nlst arg; Nod *body; } fndef; struct { char *name; char *pkg; Typ *type; Nod *init; } dcl; struct { Nlst body; } blk; struct { char *name; Nlst args; Typ *type; Nod *body; } func; struct { char *name; Nlst args; } call; }; }; #pragma varargck type "N" Nod* #pragma varargck type "O" Nod* #pragma varargck type "L" Nlst #pragma varargck type "M" Nlst extern int lexline; extern char* lexfile;