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))
Defined macros
MARK
defined in line
5; used 2 times
SQLINC
defined in line
6;
never used
isptr
defined in line
30;
never used