|
|
1.1 ! root 1: /* ! 2: * Definitions and declarations used for storage management. ! 3: */ ! 4: ! 5: #define MARK 0100000 /* high-order bit for gc marking */ ! 6: #define SQLINC 128 /* increment for s. q. list space */ ! 7: ! 8: /* ! 9: * External definitions. ! 10: */ ! 11: ! 12: extern unsigned heapneed; /* stated need for heap space */ ! 13: extern unsigned strneed; /* stated need for string space */ ! 14: extern int *boundary; /* Icon/C stack boundary address */ ! 15: extern struct descrip *globals; /* start of global variables */ ! 16: extern struct descrip *eglobals; /* end of global variables */ ! 17: extern struct descrip *gnames; /* start of global variable names */ ! 18: extern struct descrip *egnames; /* end of global variable names */ ! 19: extern struct descrip *statics; /* start of static variables */ ! 20: extern struct descrip *estatics; /* end of static variables */ ! 21: extern struct descrip tended[]; /* tended descriptors, used by lib routines */ ! 22: extern struct descrip etended[]; /* end of tended descriptors */ ! 23: extern struct descrip **sqlist; /* beginning of string qualifier list */ ! 24: extern struct descrip **sqfree; /* string qualifier list free pointer */ ! 25: extern struct descrip **esqlist; /* end of string qualifier list */ ! 26: ! 27: /* ! 28: * Test if *x is a pointer. ! 29: */ ! 30: #define isptr(x) ((!QUAL(*x)) && (VAR(*x) || POINTER(*x))) ! 31: /* ! 32: * Get type of block pointed at by x. ! 33: */ ! 34: #define blktype(x) (*(int *)x) ! 35: /* ! 36: * getsize(x) takes the block pointed to by x and if the size of ! 37: * the block as indicated by bsizes[] is non-zero it returns the ! 38: * indicated size, otherwise it returns the second word in the ! 39: * block which should be the size. ! 40: */ ! 41: #define getsize(x) (bsizes[*(int *)x & ~MARK] ? \ ! 42: bsizes[*(int *)x & ~MARK] : *((int *)x + 1))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.