69 |
(sgc_type_map[xSG] & SGC_WRITABLE)) \ |
(sgc_type_map[xSG] & SGC_WRITABLE)) \ |
70 |
{if_code;}} while(0) |
{if_code;}} while(0) |
71 |
|
|
72 |
#define sgc_mark_object(x) IF_WRITABLE(x,if((x)->d.m==0) sgc_mark_object1(x)) |
#define sgc_mark_object(x) IF_WRITABLE(x,if(!is_marked(x)) sgc_mark_object1(x)) |
73 |
/* |
/* |
74 |
#define sgc_mark_object(x) sgc_mark_object1(x) |
#define sgc_mark_object(x) sgc_mark_object1(x) |
75 |
*/ |
*/ |
81 |
|
|
82 |
|
|
83 |
/* for the S field of the FIRSTWORD */ |
/* for the S field of the FIRSTWORD */ |
84 |
enum sgc_type { SGC_NORMAL, /* not allocated since the last sgc */ |
enum sgc_type { SGC_NORMAL, /* not allocated since the last sgc */ |
85 |
SGC_RECENT /* allocated since last sgc */ |
SGC_RECENT /* allocated since last sgc */ |
86 |
}; |
}; |
87 |
|
|
88 |
|
|
89 |
#define TM_BASE_TYPE_P(i) (((int) (tm_table[i].tm_type)) == i) |
#define TM_BASE_TYPE_P(i) (((int) (tm_table[i].tm_type)) == i) |
99 |
/* check if a relblock address is new relblock */ |
/* check if a relblock address is new relblock */ |
100 |
#define SGC_RELBLOCK_P(x) ((char *)(x) >= rb_start) |
#define SGC_RELBLOCK_P(x) ((char *)(x) >= rb_start) |
101 |
|
|
102 |
/* the following assumes that the char s,m fields of first word |
#define SGC_OR_M(x) (is_marked_or_free((object)x) || (is_cons((object)x) ? ON_SGC_PAGE((object)x) : ((object)x)->d.s)) |
|
have same length as a short |
|
|
(x->d.m || x->d.s) would be an equivalent for our purposes */ |
|
|
struct sgc_firstword {short t; short sm;}; |
|
|
#define SGC_OR_M(x) (((struct sgc_firstword *)(x))->sm) |
|
|
|
|
103 |
#ifndef SIGPROTV |
#ifndef SIGPROTV |
104 |
#define SIGPROTV SIGSEGV |
#define SIGPROTV SIGSEGV |
105 |
#endif |
#endif |
135 |
*/ |
*/ |
136 |
char type_map[MAXPAGE]; |
char type_map[MAXPAGE]; |
137 |
|
|
138 |
|
#define available_pages \ |
139 |
|
((long)((real_maxpage-page(heap_end)-new_holepage-nrbpage-real_maxpage/32))) |