|
|
1.1 ! root 1: /* ! 2: * Structures for symbol table entries. ! 3: */ ! 4: ! 5: struct lentry { /* local table entry */ ! 6: struct lentry *l_blink; /* link for bucket chain */ ! 7: char *l_name; /* name of variable */ ! 8: int l_flag; /* variable flags */ ! 9: }; ! 10: ! 11: struct gentry { /* global table entry */ ! 12: struct gentry *g_blink; /* link for bucket chain */ ! 13: char *g_name; /* name of variable */ ! 14: int g_flag; /* variable flags */ ! 15: int g_nargs; /* number of args (procedure) or */ ! 16: }; /* number of fields (record) */ ! 17: ! 18: struct centry { /* constant table entry */ ! 19: struct centry *c_blink; /* link for bucket chain */ ! 20: char *c_name; /* pointer to string */ ! 21: int c_length; /* length of string */ ! 22: int c_flag; /* type of literal flag */ ! 23: }; ! 24: ! 25: struct ientry { /* identifier table entry */ ! 26: struct ientry *i_blink; /* link for bucket chain */ ! 27: char *i_name; /* pointer to string */ ! 28: int i_length; /* length of string */ ! 29: }; ! 30: ! 31: /* ! 32: * Flag values. ! 33: */ ! 34: ! 35: #define F_GLOBAL 01 /* variable declared global externally */ ! 36: #define F_PROC 04 /* procedure */ ! 37: #define F_RECORD 010 /* record */ ! 38: #define F_DYNAMIC 020 /* variable declared local dynamic */ ! 39: #define F_STATIC 040 /* variable declared local static */ ! 40: #define F_BUILTIN 0100 /* identifier refers to built-in procedure */ ! 41: #define F_IMPERROR 0400 /* procedure has default error */ ! 42: #define F_ARGUMENT 01000 /* variable is a formal parameter */ ! 43: #define F_INTLIT 02000 /* literal is an integer */ ! 44: #define F_REALLIT 04000 /* literal is a real */ ! 45: #define F_STRLIT 010000 /* literal is a string */ ! 46: #define F_CSETLIT 020000 /* literal is a cset */ ! 47: ! 48: /* ! 49: * Symbol table region pointers. ! 50: */ ! 51: ! 52: extern struct lentry **lhash; /* hash area for local table */ ! 53: extern struct gentry **ghash; /* hash area for global table */ ! 54: extern struct centry **chash; /* hash area for constant table */ ! 55: extern struct ientry **ihash; /* hash area for identifier table */ ! 56: ! 57: extern struct lentry *ltable; /* local table */ ! 58: extern struct gentry *gtable; /* global table */ ! 59: extern struct centry *ctable; /* constant table */ ! 60: extern struct ientry *itable; /* identifier table */ ! 61: ! 62: extern struct lentry *lfree; /* free pointer for local table */ ! 63: extern struct gentry *gfree; /* free pointer for global table */ ! 64: extern struct centry *ctfree; /* free pointer for constant table */ ! 65: extern struct ientry *ifree; /* free pointer for identifier table */ ! 66: ! 67: extern int lsize; /* initial size of local table */ ! 68: extern int gsize; /* initial size of global table */ ! 69: extern int csize; /* initial size of constant table */ ! 70: extern int isize; /* initial size of identifier table */ ! 71: extern int ihsize; /* initial size of identifier hash table */ ! 72: extern int lhsize; /* initial size of local hash tables */ ! 73: extern int ghsize; /* initial size of global hash tables */ ! 74: extern int chsize; /* initial size of constant hash tables */ ! 75: extern int lmask; /* mask for local table hash */ ! 76: extern int gmask; /* mask for global table hash */ ! 77: extern int cmask; /* mask for constant table hash */ ! 78: extern int imask; /* mask for identifier table hash */ ! 79: ! 80: /* ! 81: * Symbol table parameters. ! 82: */ ! 83: ! 84: #define LSIZE 100 /* default size of local table */ ! 85: #define GSIZE 100 /* default size of global table */ ! 86: #define CSIZE 100 /* default size of constant table */ ! 87: #define ISIZE 500 /* default size of identifier table */ ! 88: #define LHSIZE 128 /* default size of local hash table */ ! 89: #define GHSIZE 128 /* default size of global hash table */ ! 90: #define CHSIZE 128 /* default size of constant hash table */ ! 91: #define IHSIZE 128 /* default size of identifier hash table */ ! 92: #ifdef PORT ! 93: #define TSIZE x /* default size of parse tree space */ ! 94: #define SSIZE x /* default size of string space */ ! 95: #endif PORT ! 96: #ifdef VAX ! 97: #define TSIZE 15000 /* default size of parse tree space */ ! 98: #define SSIZE 15000 /* default size of string space */ ! 99: #endif VAX ! 100: #ifdef PDP11 ! 101: #define TSIZE 7500 /* default size of parse tree space */ ! 102: #define SSIZE 5000 /* default size of string space */ ! 103: #endif PDP11 ! 104: ! 105: /* ! 106: * Structure for keyword table. ! 107: */ ! 108: ! 109: struct keyent { ! 110: char *keyname; ! 111: int keyid; ! 112: }; ! 113: ! 114: extern struct keyent keytab[]; /* keyword table */ ! 115: ! 116: /* ! 117: * Hash functions for symbol tables. ! 118: */ ! 119: ! 120: #define ghasher(x) (((int)x)&gmask) /* global symbol table */ ! 121: #define lhasher(x) (((int)x)&lmask) /* local symbol table */ ! 122: #define chasher(x) (((int)x)&cmask) /* constant symbol table */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.