123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #include <local.h>
- #ifdef extern
- #define INIT(x) = x
- #else
- #define INIT(x) /* empty */
- #endif
- #if BIGMACHINE
- #define BORS(x,y) x
- #else
- #define BORS(x,y) y
- #endif
- /* Tunable constants */
- #define MAXALLREG 5 /* Maximum number of allocates per rule */
- #define MAXREGS BORS(36,32) /* Total number of registers */
- #define MAXREGVARS 8 /* Maximum regvars per type */
- #define MAXPROPS 16 /* Total number of register properties */
- #define MAXTOKENS BORS(75,32) /* Different kind of tokens */
- #define MAXSETS BORS(100,80) /* Number of tokenexpressions definable */
- #define MAXEMPATLEN 25 /* Maximum length of EM-pattern/replacement */
- #define TOKENSIZE 5 /* Maximum number of fields in token struct */
- #define MAXINSTANCE BORS(250,120) /* Maximum number of different tokeninstances */
- #define MAXSTRINGS BORS(800,400)/* Maximum number of different codestrings */
- #define MAXPATTERN BORS(8000,6000) /* Maximum number of bytes in pattern[] */
- #define MAXNODES BORS(500,400) /* Maximum number of expression nodes */
- #define MAXMEMBERS 2 /* Maximum number of subregisters per reg */
- #define NMOVES BORS(50,30) /* Maximum number of move definitions */
- #define MAXC1 20 /* Maximum of coercions type 1 */
- #define MAXC2 20 /* Maximum of coercions type 2 */
- #define MAXC3 20 /* Maximum of coercions type 3 */
- #define MAXSPLIT 4 /* Maximum degree of split */
- #define MAXNSTR 40 /* Maximum consecutive strings in coderule */
- extern char *hname INIT("tables.h");
- extern char *cname INIT("tables.c");
- extern char *iname; /* stdin */
- /* Derived constants */
- #define SETSIZE ((MAXREGS+1+MAXTOKENS+15)>>4)
- #define PROPSETSIZE ((MAXPROPS+15)>>4)
- #define BMASK 0377
- #define BSHIFT 8
- #define TRUE 1
- #define FALSE 0
- #define MAXPATLEN 7 /* Maximum length of tokenpatterns */
- typedef char byte;
- typedef char * string;
- extern char *myalloc();
- #include <cg_pattern.h>
- typedef struct list1str {
- struct list1str *l1next;
- string l1name;
- } *list1;
- typedef struct list2str {
- struct list2str *l2next;
- list1 l2list;
- } *list2;
- typedef struct list3str {
- struct list3str *l3next;
- list2 l3list;
- } *list3;
- typedef struct reginfo {
- string rname;
- string rrepr;
- int rsize;
- int rmembers[MAXMEMBERS];
- int rregvar;
- short rprop[PROPSETSIZE];
- } *reginfo;
- typedef struct tokeninfo {
- string t_name;
- list2 t_struct;
- struct {
- int t_type;
- string t_sname;
- } t_fields[TOKENSIZE-1];
- int t_size;
- cost_t t_cost;
- int t_format;
- } token_t,*token_p;
- typedef struct ident {
- struct ident *i_next;
- string i_name;
- int i_type;
- # define IREG 1
- # define IPRP 2
- # define ITOK 3
- # define IEXP 4
- union {
- int i_regno;
- int i_prpno;
- int i_tokno;
- int i_expno;
- } i_i;
- } ident_t,*ident_p;
- #define ITABSIZE 32
- extern ident_p identtab[ITABSIZE];
- #define LOOKUP 0
- #define HALFWAY 1
- #define ENTER 2
- #define JUSTLOOKING 3
- typedef struct expr {
- int expr_typ;
- # define TYPINT 1
- # define TYPREG 2
- # define TYPSTR 3
- # define TYPBOOL 4
- int expr_index;
- } expr_t,*expr_p;
- extern unsigned cc1 INIT(1),cc2 INIT(1),cc3 INIT(1),cc4 INIT(1);
- extern node_t nodes[MAXNODES];
- extern node_p lastnode INIT(nodes+1);
- extern string codestrings[MAXSTRINGS];
- extern int ncodestrings;
- extern int strar[MAXNSTR];
- extern int nstr;
- extern int pathash[256];
- extern reginfo machregs[MAXREGS];
- extern char stregclass[MAXREGS];
- extern int nmachregs INIT(1);
- extern int nregclasses INIT(1);
- extern int maxmembers;
- extern struct {
- ident_p propname;
- set_t propset;
- } machprops[MAXPROPS];
- extern int nprops;
- extern token_t machtokens[MAXTOKENS];
- extern int nmachtokens INIT(1);
- extern set_t machsets[MAXSETS];
- extern int nmachsets;
- extern int patmnem[MAXEMPATLEN];
- extern int empatlen;
- extern int maxempatlen;
- extern int empatexpr;
- extern int maxrule INIT(1);
- extern int pattokexp[MAXPATLEN];
- extern int tokpatlen;
- extern int lookident; /* lexical analyzer flag */
- extern list3 structpool;
- extern int nallreg;
- extern int allreg[MAXALLREG];
- extern int maxallreg;
- extern int lino;
- extern int nerrors;
- extern int curtokexp;
- extern expr_t arexp[TOKENSIZE];
- extern int narexp;
- extern inst_t arinstance[MAXINSTANCE];
- extern int narinstance INIT(1);
- extern move_t machmoves[NMOVES];
- extern int nmoves;
- extern byte pattern[MAXPATTERN];
- extern int npatbytes;
- extern int prevind;
- extern int rulecount; /* Temporary index for ... construct */
- extern int ncoderules;
- extern int codebytes;
- extern FILE *cfile;
- extern FILE *hfile;
- extern int maxtokensize;
- extern int dealflag;
- extern int emrepllen;
- extern int replmnem[MAXEMPATLEN];
- extern int tokrepllen;
- extern int replinst[MAXPATLEN];
- extern int replexpr[MAXPATLEN];
- extern c1_t c1coercs[MAXC1];
- extern c2_t c2coercs[MAXC2];
- extern c3_t c3coercs[MAXC3];
- extern int nc1,nc2,nc3;
- extern int maxsplit;
- extern int wsize INIT(-1);
- extern int psize INIT(-1);
- extern int bsize INIT(-1);
- extern char *fmt;
- extern int cchandled;
- extern int ccspoiled;
- extern int ccregexpr;
- extern int ccinstanceno;
- extern int cocopropno;
- extern int cocosetno;
- extern int allexpno;
- extern int rvused; /* regvars used */
- extern int nregvar[4]; /* # of register variables of all kinds */
- extern int rvnumbers[4][MAXREGVARS]; /* The register numbers */
- #define chktabsiz(size,maxsize,which) if(size>=maxsize) tabovf(which)
- #define MUST1BEINT(e) int exp1=e.expr_index;tstint(e)
- #define MUST2BEINT(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstint(e1);tstint(e2)
- #define MUST1BEBOOL(e) int exp1=e.expr_index;tstbool(e)
- #define MUST2BEBOOL(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstbool(e1);tstbool(e2)
- extern ident_p ilookup();
- extern list2 lookstruct();
- extern string scopy();
- extern unsigned hash();
|