fix ffi extraction of substruct from GC-managed struct

This commit is contained in:
Matthew Flatt 2010-08-15 10:24:30 -06:00
parent cf9912c811
commit b32a0b8401
2 changed files with 8 additions and 2 deletions

View File

@ -1176,6 +1176,9 @@ END_XFORM_SKIP;
#define scheme_make_foreign_cpointer(x) \
((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) \
((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_fpointer: return (REF_CTYPE(void*));
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);
}
return NULL; /* hush the compiler */

View File

@ -972,6 +972,9 @@ ffi_abi sym_to_abi(char *who, Scheme_Object *sym)
#define scheme_make_foreign_cpointer(x) \
((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) \
((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")")))
"scheme_void")})
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);
}
@hush