123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #include <lib9.h>
- #include <bio.h>
- #include "../qc/q.out.h"
- #ifndef EXTERN
- #define EXTERN extern
- #endif
- typedef struct Sym Sym;
- typedef struct Gen Gen;
- typedef struct Io Io;
- typedef struct Hist Hist;
- #define MAXALIGN 7
- #define FPCHIP 1
- #define NSYMB 8192
- #define BUFSIZ 8192
- #define HISTSZ 20
- #define NINCLUDE 10
- #define NHUNK 10000
- #define EOF (-1)
- #define IGN (-2)
- #define GETC() ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff)
- #define NHASH 503
- #define STRINGSZ 200
- #define NMACRO 10
- #define ALLOC(lhs, type)\
- while(nhunk < sizeof(type))\
- gethunk();\
- lhs = (type*)hunk;\
- nhunk -= sizeof(type);\
- hunk += sizeof(type);
- #define ALLOCN(lhs, len, n)\
- if(lhs+len != hunk || nhunk < n) {\
- while(nhunk <= len)\
- gethunk();\
- memmove(hunk, lhs, len);\
- lhs = hunk;\
- hunk += len;\
- nhunk -= len;\
- }\
- hunk += n;\
- nhunk -= n;
- struct Sym
- {
- Sym* link;
- char* macro;
- long value;
- ushort type;
- char *name;
- char sym;
- };
- #define S ((Sym*)0)
- struct
- {
- char* p;
- int c;
- } fi;
- struct Io
- {
- Io* link;
- char b[BUFSIZ];
- char* p;
- short c;
- short f;
- };
- #define I ((Io*)0)
- struct
- {
- Sym* sym;
- short type;
- } h[NSYM];
- struct Gen
- {
- Sym* sym;
- long offset;
- short type;
- short reg;
- short xreg;
- short name;
- ushort mask;
- double dval;
- char sval[8];
- };
- struct Hist
- {
- Hist* link;
- char* name;
- long line;
- long offset;
- };
- #define H ((Hist*)0)
- enum
- {
- CLAST,
- CMACARG,
- CMACRO,
- CPREPROC
- };
- EXTERN char debug[256];
- EXTERN Sym* hash[NHASH];
- EXTERN char* Dlist[30];
- EXTERN int nDlist;
- EXTERN Hist* ehist;
- EXTERN int newflag;
- EXTERN Hist* hist;
- EXTERN char* hunk;
- EXTERN char* include[NINCLUDE];
- EXTERN Io* iofree;
- EXTERN Io* ionext;
- EXTERN Io* iostack;
- EXTERN long lineno;
- EXTERN int nerrors;
- EXTERN long nhunk;
- EXTERN int nosched;
- EXTERN int ninclude;
- EXTERN Gen nullgen;
- EXTERN char* outfile;
- EXTERN int pass;
- EXTERN char* pathname;
- EXTERN long pc;
- EXTERN int peekc;
- EXTERN int sym;
- EXTERN char symb[NSYMB];
- EXTERN int thechar;
- EXTERN char* thestring;
- EXTERN long thunk;
- EXTERN Biobuf obuf;
- void errorexit(void);
- void pushio(void);
- void newio(void);
- void newfile(char*, int);
- Sym* slookup(char*);
- Sym* lookup(void);
- void syminit(Sym*);
- long yylex(void);
- int getc(void);
- int getnsc(void);
- void unget(int);
- int escchar(int);
- void cinit(void);
- void pinit(char*);
- void cclean(void);
- void outcode(int, Gen*, int, Gen*);
- void outgcode(int, Gen*, int, Gen*, Gen*);
- void zname(char*, int, int);
- void zaddr(Gen*, int);
- void ieeedtod(Ieee*, double);
- int filbuf(void);
- Sym* getsym(void);
- void domacro(void);
- void macund(void);
- void macdef(void);
- void macexpand(Sym*, char*);
- void macinc(void);
- void macprag(void);
- void maclin(void);
- void macif(int);
- void macend(void);
- void dodefine(char*);
- void prfile(long);
- void outhist(void);
- void linehist(char*, int);
- void gethunk(void);
- void yyerror(char*, ...);
- int yyparse(void);
- void setinclude(char*);
- int assemble(char*);
- /*
- * system-dependent stuff from ../cc/compat.c
- */
- enum /* keep in synch with ../cc/cc.h */
- {
- Plan9 = 1<<0,
- Unix = 1<<1,
- Windows = 1<<2
- };
- int mywait(int*);
- int mycreat(char*, int);
- int systemtype(int);
- int pathchar(void);
- char* mygetwd(char*, int);
- int myexec(char*, char*[]);
- int mydup(int, int);
- int myfork(void);
- int mypipe(int*);
- void* mysbrk(ulong);
|