fix GC handling of cpointers with offsets
This commit is contained in:
parent
bd7ffb282f
commit
0540359965
|
@ -152,7 +152,9 @@ static int quotesyntax_obj_FIXUP(void *p, struct NewGC *gc) {
|
|||
|
||||
static int cpointer_obj_SIZE(void *p, struct NewGC *gc) {
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Cptr));
|
||||
(SCHEME_CPTR_HAS_OFFSET(p)
|
||||
? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr))
|
||||
: gcBYTES_TO_WORDS(sizeof(Scheme_Cptr)));
|
||||
}
|
||||
|
||||
static int cpointer_obj_MARK(void *p, struct NewGC *gc) {
|
||||
|
@ -161,7 +163,9 @@ static int cpointer_obj_MARK(void *p, struct NewGC *gc) {
|
|||
}
|
||||
gcMARK2(SCHEME_CPTR_TYPE(p), gc);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Cptr));
|
||||
(SCHEME_CPTR_HAS_OFFSET(p)
|
||||
? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr))
|
||||
: gcBYTES_TO_WORDS(sizeof(Scheme_Cptr)));
|
||||
}
|
||||
|
||||
static int cpointer_obj_FIXUP(void *p, struct NewGC *gc) {
|
||||
|
@ -170,38 +174,13 @@ static int cpointer_obj_FIXUP(void *p, struct NewGC *gc) {
|
|||
}
|
||||
gcFIXUP2(SCHEME_CPTR_TYPE(p), gc);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Cptr));
|
||||
(SCHEME_CPTR_HAS_OFFSET(p)
|
||||
? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr))
|
||||
: gcBYTES_TO_WORDS(sizeof(Scheme_Cptr)));
|
||||
}
|
||||
|
||||
#define cpointer_obj_IS_ATOMIC 0
|
||||
#define cpointer_obj_IS_CONST_SIZE 1
|
||||
|
||||
|
||||
static int offset_cpointer_obj_SIZE(void *p, struct NewGC *gc) {
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr));
|
||||
}
|
||||
|
||||
static int offset_cpointer_obj_MARK(void *p, struct NewGC *gc) {
|
||||
if (!(SCHEME_CPTR_FLAGS(p) & 0x1)) {
|
||||
gcMARK2(SCHEME_CPTR_VAL(p), gc);
|
||||
}
|
||||
gcMARK2(SCHEME_CPTR_TYPE(p), gc);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr));
|
||||
}
|
||||
|
||||
static int offset_cpointer_obj_FIXUP(void *p, struct NewGC *gc) {
|
||||
if (!(SCHEME_CPTR_FLAGS(p) & 0x1)) {
|
||||
gcFIXUP2(SCHEME_CPTR_VAL(p), gc);
|
||||
}
|
||||
gcFIXUP2(SCHEME_CPTR_TYPE(p), gc);
|
||||
return
|
||||
gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr));
|
||||
}
|
||||
|
||||
#define offset_cpointer_obj_IS_ATOMIC 0
|
||||
#define offset_cpointer_obj_IS_CONST_SIZE 1
|
||||
#define cpointer_obj_IS_CONST_SIZE 0
|
||||
|
||||
|
||||
static int twoptr_obj_SIZE(void *p, struct NewGC *gc) {
|
||||
|
|
|
@ -61,10 +61,9 @@ cpointer_obj {
|
|||
}
|
||||
gcMARK2(SCHEME_CPTR_TYPE(p), gc);
|
||||
size:
|
||||
if (SCHEME_CPTR_HAS_OFFSET(p))
|
||||
return gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr));
|
||||
else
|
||||
return gcBYTES_TO_WORDS(sizeof(Scheme_Cptr));
|
||||
(SCHEME_CPTR_HAS_OFFSET(p)
|
||||
? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr))
|
||||
: gcBYTES_TO_WORDS(sizeof(Scheme_Cptr)));
|
||||
}
|
||||
|
||||
twoptr_obj {
|
||||
|
|
Loading…
Reference in New Issue
Block a user