|
|
BSD 4.3
/*
* Structures for symbol table entries.
*/
struct lentry { /* local table entry */
struct lentry *l_blink; /* link for bucket chain */
char *l_name; /* name of variable */
int l_flag; /* variable flags */
};
struct gentry { /* global table entry */
struct gentry *g_blink; /* link for bucket chain */
char *g_name; /* name of variable */
int g_flag; /* variable flags */
int g_nargs; /* number of args (procedure) or */
}; /* number of fields (record) */
struct centry { /* constant table entry */
struct centry *c_blink; /* link for bucket chain */
char *c_name; /* pointer to string */
int c_length; /* length of string */
int c_flag; /* type of literal flag */
};
struct ientry { /* identifier table entry */
struct ientry *i_blink; /* link for bucket chain */
char *i_name; /* pointer to string */
int i_length; /* length of string */
};
/*
* Flag values.
*/
#define F_GLOBAL 01 /* variable declared global externally */
#define F_PROC 04 /* procedure */
#define F_RECORD 010 /* record */
#define F_DYNAMIC 020 /* variable declared local dynamic */
#define F_STATIC 040 /* variable declared local static */
#define F_BUILTIN 0100 /* identifier refers to built-in procedure */
#define F_IMPERROR 0400 /* procedure has default error */
#define F_ARGUMENT 01000 /* variable is a formal parameter */
#define F_INTLIT 02000 /* literal is an integer */
#define F_REALLIT 04000 /* literal is a real */
#define F_STRLIT 010000 /* literal is a string */
#define F_CSETLIT 020000 /* literal is a cset */
/*
* Symbol table region pointers.
*/
extern struct lentry **lhash; /* hash area for local table */
extern struct gentry **ghash; /* hash area for global table */
extern struct centry **chash; /* hash area for constant table */
extern struct ientry **ihash; /* hash area for identifier table */
extern struct lentry *ltable; /* local table */
extern struct gentry *gtable; /* global table */
extern struct centry *ctable; /* constant table */
extern struct ientry *itable; /* identifier table */
extern struct lentry *lfree; /* free pointer for local table */
extern struct gentry *gfree; /* free pointer for global table */
extern struct centry *ctfree; /* free pointer for constant table */
extern struct ientry *ifree; /* free pointer for identifier table */
extern int lsize; /* initial size of local table */
extern int gsize; /* initial size of global table */
extern int csize; /* initial size of constant table */
extern int isize; /* initial size of identifier table */
extern int ihsize; /* initial size of identifier hash table */
extern int lhsize; /* initial size of local hash tables */
extern int ghsize; /* initial size of global hash tables */
extern int chsize; /* initial size of constant hash tables */
extern int lmask; /* mask for local table hash */
extern int gmask; /* mask for global table hash */
extern int cmask; /* mask for constant table hash */
extern int imask; /* mask for identifier table hash */
/*
* Symbol table parameters.
*/
#define LSIZE 100 /* default size of local table */
#define GSIZE 100 /* default size of global table */
#define CSIZE 100 /* default size of constant table */
#define ISIZE 500 /* default size of identifier table */
#define LHSIZE 128 /* default size of local hash table */
#define GHSIZE 128 /* default size of global hash table */
#define CHSIZE 128 /* default size of constant hash table */
#define IHSIZE 128 /* default size of identifier hash table */
#ifdef PORT
#define TSIZE x /* default size of parse tree space */
#define SSIZE x /* default size of string space */
#endif PORT
#ifdef VAX
#define TSIZE 15000 /* default size of parse tree space */
#define SSIZE 15000 /* default size of string space */
#endif VAX
#ifdef PDP11
#define TSIZE 7500 /* default size of parse tree space */
#define SSIZE 5000 /* default size of string space */
#endif PDP11
/*
* Structure for keyword table.
*/
struct keyent {
char *keyname;
int keyid;
};
extern struct keyent keytab[]; /* keyword table */
/*
* Hash functions for symbol tables.
*/
#define ghasher(x) (((int)x)&gmask) /* global symbol table */
#define lhasher(x) (((int)x)&lmask) /* local symbol table */
#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.