int addfile(File*); void addinclude(char*); char *addrprint(char*, char*, int, Addr*); Node *adtdecl(Decl *ids, Node *fields); void adtdecled(Node *n); void adtdefd(Type*); Decl *adtmeths(Type*); void adtstub(Decl*); long align(long, int); void *allocmem(ulong); void altcheck(Node *an, Type *ret); void altcom(Node*); Inst *andand(Node*, int, Inst*); Decl *appdecls(Decl*, Decl*); int argcompat(Node*, Decl*, Node*); void arraycom(Node*, Node*); void arraydefault(Node*, Node*); Type *arrowtype(Type*, Decl*); void asmdesc(Desc*); void asmentry(Decl*); void asminitializer(long, Node*); void asminst(Inst*); void asmmod(Decl*); void asmstring(long, Sym*); void asmvar(long, Decl*); int assignindices(Node*); void bccom(Node*, Inst**); Inst *bcom(Node*, int, Inst*); void bindnames(Node*); void bindtypes(Type *t); Ok callcast(Node*, int, int); void callcom(Src*, int, Node*, Node*); double canontod(ulong v[2]); void casecheck(Node *cn, Type *ret); int casecmp(Type*, Node*, Node*); void casecom(Node*); Node *caselist(Node*, Node*); void casesort(Type*, Label*, Label*, int, int); Case *checklabels(Node *inits, Type *ctype, int nlab, char *title); void checkrefs(Decl*); Node *checkused(Node*); int circlval(Node*, Node*); void concheck(Node *n, int isglobal); Node *condecl(Decl*, Node*); void condecled(Node *n); void constub(Decl*); Type *copytype(Type*); Type *copytypeids(Type*); char *ctprint(char*, char*, Type*); int ctypeconv(va_list*, Fconv*); Line curline(void); Decl *curscope(void); int cycarc(Type*, Type*); void cycfield(Type*, Decl*); void cycsizetype(Type*); void cyctype(Type*); int dasdecl(Node *n); void declaserr(Node*); int declasinfer(Node*, Type*); int declconv(va_list*, Fconv*); Decl *declsort(Decl*); void declstart(void); void deldecl(Decl*); long descmap(Decl*, uchar*, long); void disaddr(int, Addr*); void disbcon(long); void discon(long); void disdata(int, long); void disdesc(Desc*); void disentry(Decl*); void disinst(Inst*); void dismod(Decl*); void disvar(long, Decl*); void disword(long); int dotconv(va_list*, Fconv*); char *dotprint(char*, char*, Decl*, int); Type *dottype(Type*, Decl*); void dtocanon(double, ulong[2]); Decl *dupdecl(Decl*); Node *dupn(int, Src*, Node*); Node *eacom(Node*, Node*, Node*); Ok echeck(Node *n, int typeok, int isglobal); Node *ecom(Src*, Node*, Node*); Node *efold(Node *n); Node *elemsort(Node*); void emit(Decl*); Sym *enter(char*, int); Desc *enterdesc(uchar*, long, long); Sym *enterstring(char*, int); char *eprint(char*, char*, Node*); char *eprintlist(char*, char*, Node*, char*); void error(Line, char*, ...); #pragma varargck argpos error 2 int etconv(va_list*, Fconv*); Node *etolist(Node*); int expconv(va_list*, Fconv*); void fatal(char*, ...); #pragma varargck argpos fatal 1 void fielddecled(Node *n); Node *fielddecl(int store, Decl *ids); int findlab(Type *ty, Node *v, Label *labs, int nlab); Fline fline(int); void fmtcheck(Node*, Node*, Node*); void fncheck(Decl *d); Decl *fnchk(Node *n); void fncom(Decl*); Node *fndecl(Node *n, Type *t, Node *body); void fndecled(Node *n); Node *fold(Node*); void foldbranch(Inst*); Node *foldc(Node*); Node *foldcast(Node*, Node*); Node *foldcasti(Node*, Node*); Node *foldr(Node*); Node *foldvc(Node*); void gbind(Node *n); int gcheck(Node*, Decl**, int); void gdasdecl(Node *n); void gdecl(Node *n); Addr genaddr(Node*); Inst *genbra(Src*, int, Node*, Node*); Inst *genchan(Src*, Type*, Node*); Desc *gendesc(Decl*, long, Decl*); Inst *genmove(Src*, int, Type*, Node*, Node*); Inst *genop(Src*, int, Node*, Node*, Node*); Inst *genrawop(Src*, int, Node*, Node*, Node*); void genstart(void); int gfltconv(va_list*, Fconv*); Decl *globalBconst(Node*); Node *globalas(Node*, Node*, int); Decl *globalbconst(Node*); Decl *globalconst(Node*); Decl *globalfconst(Node*); Decl *globalsconst(Node*); Node *hascomm(Node*); int hasside(Node*); long idoffsets(Decl*, long, int); Type *idtype(Type*); void importcheck(Node *n, int isglobal); void importchk(Node*); Node *importdecl(Node *m, Decl *ids); void importdecled(Node *n); void includef(Sym*); Node *indsascom(Src*, Node*, Node*); int initable(Node*, Node*, int); void installids(int store, Decl *ids); int instconv(va_list*, Fconv*); int islval(Node*); void joiniface(Type*, Type*); void lexinit(void); void lexstart(char*); int lineconv(va_list*, Fconv*); Decl *lookdot(Decl*, Sym*); int mapconv(va_list*, Fconv*); int marklval(Node*); int mathchk(Node*, int); Type *mkadtcon(Type*); Type *mkadtpickcon(Type*, Type*); Type *mkarrowtype(Line*, Line*, Type*, Sym*); Node *mkbin(int, Node*, Node*); Node *mkconst(Src*, Long); Decl *mkdecl(Src*, int, Type*); Node *mkdeclname(Src*, Decl*); Desc *mkdesc(long, Decl*); Type *mkdottype(Line*, Line*, Type*, Sym*); File *mkfile(char*, int, int, int, char*, int, int); Decl *mkids(Src*, Sym*, Type*, Decl*); Type *mkidtype(Src*, Sym*); Type *mkiface(Decl*); Inst *mkinst(void); Node *mkname(Src*, Sym*); Node *mknil(Src*); Node *mkn(int, Node*, Node*); Node *mkrconst(Src*, Real); Node *mksconst(Src*, Sym*); Node *mkscope(Node *body); Type *mktalt(Case*); Desc *mktdesc(Type*); Node *mktn(Type*); Type *mktype(Line*, Line*, int, Type*, Decl*); Node *mkunary(int, Node*); Type *mkvarargs(Node*, Node*); Teq *modclass(void); void modcode(Decl*); void modcom(Decl*); void moddataref(void); Node *moddecl(Decl *ids, Node *fields); void moddecled(Node *n); Decl *modglobals(Decl*, Decl*); void modrefable(Type*); void modstub(Decl*); void modtab(Decl*); int mpatof(char*, double*); Decl *namedot(Decl*, Sym*); Decl *namesort(Decl*); void narrowmods(void); void nerror(Node*, char*, ...); #pragma varargck argpos nerror 2 Inst *nextinst(void); int nodeconv(va_list*, Fconv*); char *nprint(char*, char*, Node*, int); void nwarn(Node*, char*, ...); #pragma varargck argpos nwarn 2 int opconv(va_list*, Fconv*); void optabinit(void); Inst *oror(Node*, int, Inst*); Node *passimplicit(Node*, Node*); void patch(Inst*, Inst*); void pickcheck(Node*, Type*); int pickdecled(Node *n); Decl *pickdefd(Type*, Decl*); void pickdupcom(Src*, Node*, Node*); void popblock(void); Decl *popids(Decl *ids); void popscopes(void); Decl *popscope(void); void printdecls(Decl*); int pushblock(void); void pushlabel(Node *n); void pushscope(void); void reach(Inst*); void *reallocmem(void*, ulong); void recvacom(Src*, Node*, Node*); void redecl(Decl *d); void reftype(Type*); void repushblock(int); void repushids(Decl *ids); void resizetype(Type*); long resolvedesc(Decl*, long, Decl*); int resolvemod(Decl*); long resolvepcs(Inst*); Node *retalloc(Node*, Node*); Decl *revids(Decl*); Node *rewrite(Node *n); Node *rewritecomm(Node*, Node*, Node*, Node*); Inst *rewritedestreg(Inst*, int, int); Inst *rewritesrcreg(Inst*, int, int, int); Node *rotater(Node*); int sameaddr(Node*, Node*); void sblfiles(void); void sblfn(Decl**, int); void sblinst(Inst*, long); void sblmod(Decl*); void sblty(Decl**, int); void sblvar(Decl*); Node* scheck(Node*, Type*); void scom(Node*); char *secpy(char*, char*, char*); char *seprint(char*, char*, char*, ...); #pragma varargck argpos seprint 3 int shiftchk(Node*); ulong sign(Decl*); Node *simplify(Node*); Szal sizeids(Decl*, long); void sizetype(Type*); Node *slicelcom(Src*, Node*, Node*); int specific(Type*); int srcconv(va_list*, Fconv*); int storeconv(va_list*, Fconv*); char *stprint(char*, char*, Type*); Sym *stringcat(Sym*, Sym*); char *stringpr(char*, char*, Sym*); Long strtoi(char*, int); int stypeconv(va_list*, Fconv*); Node *sumark(Node*); int symcmp(Sym*, Sym*); Node *tacquire(Node*); Ok tagcast(Node*, Node*, Node*, Decl*, int, int); Node *talloc(Node*, Type*, Node*); int tcompat(Type*, Type*, int); Decl *tdecls(void); long tdescmap(Type*, uchar*, long); void teqclass(Type*); int tequal(Type*, Type*); void tfree(Node*); void tinit(void); Type *toptype(Src*, Type*); Type *topvartype(Type *t, Decl *id, int tyok); char *tprint(char*, char*, Type*); void translate(char*, char*, char*); void trelease(Node*); int tupaliased(Node*, Node*); void tupcom(Node*, Node*); void tuplcom(Node*, Node*); Decl *tuplefields(Node*); void typebuiltin(Decl*, Type*); Decl *typecheck(int); int typeconv(va_list*, Fconv*); Node *typedecl(Decl *ids, Type *t); void typedecled(Node *n); Decl *typeids(Decl*, Type*); void typeinit(void); void typestart(void); Decl *undefed(Src *src, Sym *s); Desc *usedesc(Desc*); void usedty(Type*); Type *usetype(Type*); Type *validtype(Type*, Decl*); int valistype(Node*); void varcheck(Node *n, int isglobal); int varcom(Decl*); Node *vardecl(Decl*, Type*); void vardecled(Node *n); Node *varinit(Decl*, Node*); Decl *varlistdecl(Decl*, Node*); Decl *vars(Decl*); int vcom(Decl*); Type *verifytypes(Type*, Decl*); void warn(Line, char*, ...); #pragma varargck argpos warn 2 void yyerror(char*, ...); #pragma varargck argpos yyerror 1 int yylex(void); int yyparse(void);