fix ffi extraction of substruct from GC-managed struct
This commit is contained in:
parent
cf9912c811
commit
b32a0b8401
|
@ -1176,6 +1176,9 @@ END_XFORM_SKIP;
|
||||||
#define scheme_make_foreign_cpointer(x) \
|
#define scheme_make_foreign_cpointer(x) \
|
||||||
((x==NULL)?scheme_false:scheme_make_cptr(x,NULL))
|
((x==NULL)?scheme_false:scheme_make_cptr(x,NULL))
|
||||||
|
|
||||||
|
#define scheme_make_foreign_offset_cpointer(x, delta) \
|
||||||
|
((delta == 0) ? scheme_make_foreign_cpointer(x) : scheme_make_offset_cptr(x,delta,NULL))
|
||||||
|
|
||||||
#define scheme_make_foreign_external_cpointer(x) \
|
#define scheme_make_foreign_external_cpointer(x) \
|
||||||
((x==NULL)?scheme_false:scheme_make_external_cptr(x,NULL))
|
((x==NULL)?scheme_false:scheme_make_external_cptr(x,NULL))
|
||||||
|
|
||||||
|
@ -1266,7 +1269,7 @@ static Scheme_Object *C2SCHEME(Scheme_Object *type, void *src,
|
||||||
case FOREIGN_scheme: return REF_CTYPE(Scheme_Object*);
|
case FOREIGN_scheme: return REF_CTYPE(Scheme_Object*);
|
||||||
case FOREIGN_fpointer: return (REF_CTYPE(void*));
|
case FOREIGN_fpointer: return (REF_CTYPE(void*));
|
||||||
case FOREIGN_struct:
|
case FOREIGN_struct:
|
||||||
return scheme_make_foreign_cpointer(W_OFFSET(src, delta));
|
return scheme_make_foreign_offset_cpointer(src, delta);
|
||||||
default: scheme_signal_error("corrupt foreign type: %V", type);
|
default: scheme_signal_error("corrupt foreign type: %V", type);
|
||||||
}
|
}
|
||||||
return NULL; /* hush the compiler */
|
return NULL; /* hush the compiler */
|
||||||
|
|
|
@ -972,6 +972,9 @@ ffi_abi sym_to_abi(char *who, Scheme_Object *sym)
|
||||||
#define scheme_make_foreign_cpointer(x) \
|
#define scheme_make_foreign_cpointer(x) \
|
||||||
((x==NULL)?scheme_false:scheme_make_cptr(x,NULL))
|
((x==NULL)?scheme_false:scheme_make_cptr(x,NULL))
|
||||||
|
|
||||||
|
#define scheme_make_foreign_offset_cpointer(x, delta) \
|
||||||
|
((delta == 0) ? scheme_make_foreign_cpointer(x) : scheme_make_offset_cptr(x,delta,NULL))
|
||||||
|
|
||||||
#define scheme_make_foreign_external_cpointer(x) \
|
#define scheme_make_foreign_external_cpointer(x) \
|
||||||
((x==NULL)?scheme_false:scheme_make_external_cptr(x,NULL))
|
((x==NULL)?scheme_false:scheme_make_external_cptr(x,NULL))
|
||||||
|
|
||||||
|
@ -1033,7 +1036,7 @@ static Scheme_Object *C2SCHEME(Scheme_Object *type, void *src,
|
||||||
(if (procedure? c->s) (c->s x) (list c->s"("x")")))
|
(if (procedure? c->s) (c->s x) (list c->s"("x")")))
|
||||||
"scheme_void")})
|
"scheme_void")})
|
||||||
case FOREIGN_struct:
|
case FOREIGN_struct:
|
||||||
return scheme_make_foreign_cpointer(W_OFFSET(src, delta));
|
return scheme_make_foreign_offset_cpointer(src, delta);
|
||||||
default: scheme_signal_error("corrupt foreign type: %V", type);
|
default: scheme_signal_error("corrupt foreign type: %V", type);
|
||||||
}
|
}
|
||||||
@hush
|
@hush
|
||||||
|
|
Loading…
Reference in New Issue
Block a user