revert argument change in #%foreign exports

The changed functions are documented and turn out to be used by the
`gui` package.
This commit is contained in:
Matthew Flatt 2020-12-20 16:23:39 -07:00
parent c006fa902f
commit 763c5465f6
8 changed files with 101 additions and 89 deletions

View File

@ -14,7 +14,7 @@
;; In the Racket source repo, this version should change only when ;; In the Racket source repo, this version should change only when
;; "racket_version.h" changes: ;; "racket_version.h" changes:
(define version "7.9.0.16") (define version "7.9.0.17")
(define deps `("racket-lib" (define deps `("racket-lib"
["racket" #:version ,version])) ["racket" #:version ,version]))

View File

@ -44,10 +44,11 @@ cstructs, and another ctype for user-defined ctypes.}
@defproc[(ffi-call [ptr cpointer?] [in-types (listof ctype?)] [out-type ctype?] @defproc[(ffi-call [ptr cpointer?] [in-types (listof ctype?)] [out-type ctype?]
[abi (or/c #f 'default 'stdcall 'sysv) #f] [abi (or/c #f 'default 'stdcall 'sysv) #f]
[save-errno? any/c] [save-errno? any/c #f]
[orig-place? any/c] [orig-place? any/c #f]
[lock-name (or/c #f string?) #f] [lock-name (or/c #f string?) #f]
[blocking? any/c #f]) [blocking? any/c #f]
[varargs-after (or/c #f positive-exact-integer?) #f])
procedure?]{ procedure?]{
The primitive mechanism that creates Racket @tech{callout} values for The primitive mechanism that creates Racket @tech{callout} values for
@ -57,10 +58,11 @@ values are marshaled.}
@defproc[(ffi-call-maker [in-types (listof ctype?)] [out-type ctype?] @defproc[(ffi-call-maker [in-types (listof ctype?)] [out-type ctype?]
[abi (or/c #f 'default 'stdcall 'sysv) #f] [abi (or/c #f 'default 'stdcall 'sysv) #f]
[save-errno? any/c] [save-errno? any/c #f]
[orig-place? any/c] [orig-place? any/c #f]
[lock-name (or/c #f string?) #f] [lock-name (or/c #f string?) #f]
[blocking? any/c #f]) [blocking? any/c #f]
[varargs-after (or/c #f positive-exact-integer?) #f])
(cpointer . -> . procedure?)]{ (cpointer . -> . procedure?)]{
A curried variant of @racket[ffi-call] that takes the foreign-procedure pointer A curried variant of @racket[ffi-call] that takes the foreign-procedure pointer
@ -70,7 +72,8 @@ separately.}
@defproc[(ffi-callback [proc procedure?] [in-types any/c] [out-type any/c] @defproc[(ffi-callback [proc procedure?] [in-types any/c] [out-type any/c]
[abi (or/c #f 'default 'stdcall 'sysv) #f] [abi (or/c #f 'default 'stdcall 'sysv) #f]
[atomic? any/c #f] [atomic? any/c #f]
[async-apply (or/c #f ((-> any) . -> . any)) #f]) [async-apply (or/c #f ((-> any) . -> . any) box?) #f]
[varargs-after (or/c #f positive-exact-integer?) #f])
ffi-callback?]{ ffi-callback?]{
The symmetric counterpart of @racket[ffi-call]. It receives a Racket The symmetric counterpart of @racket[ffi-call]. It receives a Racket
@ -80,7 +83,8 @@ C pointer.}
@defproc[(ffi-callback-maker [in-types any/c] [out-type any/c] @defproc[(ffi-callback-maker [in-types any/c] [out-type any/c]
[abi (or/c #f 'default 'stdcall 'sysv) #f] [abi (or/c #f 'default 'stdcall 'sysv) #f]
[atomic? any/c #f] [atomic? any/c #f]
[async-apply (or/c #f ((-> any) . -> . any)) #f]) [async-apply (or/c #f ((-> any) . -> . any) box?) #f]
[varargs-after (or/c #f positive-exact-integer?) #f])
(procedure? . -> . ffi-callback?)]{ (procedure? . -> . ffi-callback?)]{
A curried variant of @racket[ffi-callback] that takes the callback procedure A curried variant of @racket[ffi-callback] that takes the callback procedure

View File

@ -534,8 +534,8 @@
;; for internal use ;; for internal use
(define held-callbacks (make-weak-hasheq)) (define held-callbacks (make-weak-hasheq))
(define (_cprocedure* itypes otype abi varargs-after wrapper keep atomic? orig-place? blocking? async-apply errno lock-name) (define (_cprocedure* itypes otype abi varargs-after wrapper keep atomic? orig-place? blocking? async-apply errno lock-name)
(define make-ffi-callback (delay/cas (ffi-callback-maker itypes otype abi varargs-after atomic? async-apply))) (define make-ffi-callback (delay/cas (ffi-callback-maker itypes otype abi atomic? async-apply varargs-after)))
(define make-ffi-call (delay/cas (ffi-call-maker itypes otype abi varargs-after errno orig-place? lock-name blocking?))) (define make-ffi-call (delay/cas (ffi-call-maker itypes otype abi errno orig-place? lock-name blocking? varargs-after)))
(define-syntax-rule (make-it wrap) (define-syntax-rule (make-it wrap)
(make-ctype _fpointer (make-ctype _fpointer
(lambda (x) (lambda (x)

View File

@ -3910,36 +3910,38 @@ static Scheme_Object *ffi_call_or_curry(const char *who, int curry, int argc, Sc
rtype = CTYPE_ARG_PRIMTYPE(base); rtype = CTYPE_ARG_PRIMTYPE(base);
abi = GET_ABI(who, ARGPOS(3)); abi = GET_ABI(who, ARGPOS(3));
if (argc > ARGPOS(4)) { if (argc > ARGPOS(4)) {
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(4), nargs);
} else
varargs_after = -1;
if (argc > ARGPOS(5)) {
save_errno = -1; save_errno = -1;
if (SCHEME_FALSEP(argv[ARGPOS(5)])) if (SCHEME_FALSEP(argv[ARGPOS(4)]))
save_errno = 0; save_errno = 0;
else if (SCHEME_SYMBOLP(argv[ARGPOS(5)]) else if (SCHEME_SYMBOLP(argv[ARGPOS(4)])
&& !SCHEME_SYM_WEIRDP(argv[ARGPOS(5)])) { && !SCHEME_SYM_WEIRDP(argv[ARGPOS(4)])) {
if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(5)]), "posix")) if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(4)]), "posix"))
save_errno = 1; save_errno = 1;
else if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(5)]), "windows")) else if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(4)]), "windows"))
save_errno = 2; save_errno = 2;
} }
if (save_errno == -1) { if (save_errno == -1) {
scheme_wrong_contract(who, "(or/c 'posix 'windows #f)", ARGPOS(5), argc, argv); scheme_wrong_contract(who, "(or/c 'posix 'windows #f)", ARGPOS(4), argc, argv);
} }
} else } else
save_errno = 0; save_errno = 0;
# if defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL) # if defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL)
if (argc > ARGPOS(6)) orig_place = SCHEME_TRUEP(argv[ARGPOS(6)]); if (argc > ARGPOS(5)) orig_place = SCHEME_TRUEP(argv[ARGPOS(5)]);
else orig_place = 0; else orig_place = 0;
# endif /* defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL) */ # endif /* defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL) */
if (argc > ARGPOS(7)) { if (argc > ARGPOS(6)) {
if (!SCHEME_FALSEP(argv[ARGPOS(7)])) { if (!SCHEME_FALSEP(argv[ARGPOS(6)])) {
if (!SCHEME_CHAR_STRINGP(argv[ARGPOS(7)])) if (!SCHEME_CHAR_STRINGP(argv[ARGPOS(6)]))
scheme_wrong_contract(who, "(or/c string? #f)", ARGPOS(7), argc, argv); scheme_wrong_contract(who, "(or/c string? #f)", ARGPOS(6), argc, argv);
lock = name_to_ffi_lock(scheme_char_string_to_byte_string(argv[ARGPOS(7)])); lock = name_to_ffi_lock(scheme_char_string_to_byte_string(argv[ARGPOS(6)]));
} }
} }
/* ARGPOS(7) is `blocking?`, but we don't use that */
if (argc > ARGPOS(8)) {
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(8), nargs);
} else
varargs_after = -1;
if (cp && SCHEME_FFIOBJP(cp)) if (cp && SCHEME_FFIOBJP(cp))
name = scheme_make_byte_string(((ffi_obj_struct*)(cp))->name); name = scheme_make_byte_string(((ffi_obj_struct*)(cp))->name);
else else
@ -4347,16 +4349,16 @@ static Scheme_Object *ffi_callback_or_curry(const char *who, int curry, int argc
scheme_wrong_contract(who, "ctype?", ARGPOS(2), argc, argv); scheme_wrong_contract(who, "ctype?", ARGPOS(2), argc, argv);
rtype = CTYPE_ARG_PRIMTYPE(base); rtype = CTYPE_ARG_PRIMTYPE(base);
abi = GET_ABI(who, ARGPOS(3)); abi = GET_ABI(who, ARGPOS(3));
if (argc > ARGPOS(4)) is_atomic = ((argc > ARGPOS(4)) && SCHEME_TRUEP(argv[ARGPOS(4)]));
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(4), nargs); sync = (is_atomic ? scheme_true : NULL);
if ((argc > ARGPOS(5))
&& !SCHEME_BOXP(argv[ARGPOS(5)])
&& !scheme_check_proc_arity2(NULL, 1, ARGPOS(5), argc, argv, 1))
scheme_wrong_contract(who, "(or/c #f (procedure-arity-includes/c 0) box?)", ARGPOS(5), argc, argv);
if (argc > ARGPOS(6))
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(6), nargs);
else else
varargs_after = -1; varargs_after = -1;
is_atomic = ((argc > ARGPOS(5)) && SCHEME_TRUEP(argv[ARGPOS(5)]));
sync = (is_atomic ? scheme_true : NULL);
if ((argc > ARGPOS(6))
&& !SCHEME_BOXP(argv[ARGPOS(6)])
&& !scheme_check_proc_arity2(NULL, 1, ARGPOS(6), argc, argv, 1))
scheme_wrong_contract(who, "(or/c #f (procedure-arity-includes/c 0) box?)", ARGPOS(6), argc, argv);
if (curry) { if (curry) {
/* all checks are done */ /* all checks are done */
@ -4402,6 +4404,7 @@ static Scheme_Object *ffi_callback_or_curry(const char *who, int curry, int argc
do_callback = ffi_queue_callback; do_callback = ffi_queue_callback;
} else } else
do_callback = ffi_do_callback; do_callback = ffi_do_callback;
/* malloc space for everything needed, so a single free gets rid of this */ /* malloc space for everything needed, so a single free gets rid of this */
cl_cif_args = scheme_malloc_code(sizeof(closure_and_cif) + nargs*sizeof(ffi_cif*)); cl_cif_args = scheme_malloc_code(sizeof(closure_and_cif) + nargs*sizeof(ffi_cif*));
scheme_thread_code_start_write(); scheme_thread_code_start_write();

View File

@ -3077,36 +3077,38 @@ static Scheme_Object *ffi_call_or_curry(const char *who, int curry, int argc, Sc
rtype = CTYPE_ARG_PRIMTYPE(base); rtype = CTYPE_ARG_PRIMTYPE(base);
abi = GET_ABI(who, ARGPOS(3)); abi = GET_ABI(who, ARGPOS(3));
if (argc > ARGPOS(4)) { if (argc > ARGPOS(4)) {
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(4), nargs);
} else
varargs_after = -1;
if (argc > ARGPOS(5)) {
save_errno = -1; save_errno = -1;
if (SCHEME_FALSEP(argv[ARGPOS(5)])) if (SCHEME_FALSEP(argv[ARGPOS(4)]))
save_errno = 0; save_errno = 0;
else if (SCHEME_SYMBOLP(argv[ARGPOS(5)]) else if (SCHEME_SYMBOLP(argv[ARGPOS(4)])
&& !SCHEME_SYM_WEIRDP(argv[ARGPOS(5)])) { && !SCHEME_SYM_WEIRDP(argv[ARGPOS(4)])) {
if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(5)]), "posix")) if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(4)]), "posix"))
save_errno = 1; save_errno = 1;
else if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(5)]), "windows")) else if (!strcmp(SCHEME_SYM_VAL(argv[ARGPOS(4)]), "windows"))
save_errno = 2; save_errno = 2;
} }
if (save_errno == -1) { if (save_errno == -1) {
scheme_wrong_contract(who, "(or/c 'posix 'windows #f)", ARGPOS(5), argc, argv); scheme_wrong_contract(who, "(or/c 'posix 'windows #f)", ARGPOS(4), argc, argv);
} }
} else } else
save_errno = 0; save_errno = 0;
@@IF{defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL)}{ @@IF{defined(MZ_USE_PLACES) && !defined(MZ_USE_FFIPOLL)}{
if (argc > ARGPOS(6)) orig_place = SCHEME_TRUEP(argv[ARGPOS(6)]); if (argc > ARGPOS(5)) orig_place = SCHEME_TRUEP(argv[ARGPOS(5)]);
else orig_place = 0; else orig_place = 0;
} }
if (argc > ARGPOS(7)) { if (argc > ARGPOS(6)) {
if (!SCHEME_FALSEP(argv[ARGPOS(7)])) { if (!SCHEME_FALSEP(argv[ARGPOS(6)])) {
if (!SCHEME_CHAR_STRINGP(argv[ARGPOS(7)])) if (!SCHEME_CHAR_STRINGP(argv[ARGPOS(6)]))
scheme_wrong_contract(who, "(or/c string? #f)", ARGPOS(7), argc, argv); scheme_wrong_contract(who, "(or/c string? #f)", ARGPOS(6), argc, argv);
lock = name_to_ffi_lock(scheme_char_string_to_byte_string(argv[ARGPOS(7)])); lock = name_to_ffi_lock(scheme_char_string_to_byte_string(argv[ARGPOS(6)]));
} }
} }
/* ARGPOS(7) is `blocking?`, but we don't use that */
if (argc > ARGPOS(8)) {
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(8), nargs);
} else
varargs_after = -1;
if (cp && SCHEME_FFIOBJP(cp)) if (cp && SCHEME_FFIOBJP(cp))
name = scheme_make_byte_string(((ffi_obj_struct*)(cp))->name); name = scheme_make_byte_string(((ffi_obj_struct*)(cp))->name);
else else
@ -3504,16 +3506,16 @@ static Scheme_Object *ffi_callback_or_curry(const char *who, int curry, int argc
scheme_wrong_contract(who, "ctype?", ARGPOS(2), argc, argv); scheme_wrong_contract(who, "ctype?", ARGPOS(2), argc, argv);
rtype = CTYPE_ARG_PRIMTYPE(base); rtype = CTYPE_ARG_PRIMTYPE(base);
abi = GET_ABI(who, ARGPOS(3)); abi = GET_ABI(who, ARGPOS(3));
if (argc > ARGPOS(4)) is_atomic = ((argc > ARGPOS(4)) && SCHEME_TRUEP(argv[ARGPOS(4)]));
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(4), nargs); sync = (is_atomic ? scheme_true : NULL);
if ((argc > ARGPOS(5))
&& !SCHEME_BOXP(argv[ARGPOS(5)])
&& !scheme_check_proc_arity2(NULL, 1, ARGPOS(5), argc, argv, 1))
scheme_wrong_contract(who, "(or/c #f (procedure-arity-includes/c 0) box?)", ARGPOS(5), argc, argv);
if (argc > ARGPOS(6))
varargs_after = extract_varargs_after(who, argc, argv, ARGPOS(6), nargs);
else else
varargs_after = -1; varargs_after = -1;
is_atomic = ((argc > ARGPOS(5)) && SCHEME_TRUEP(argv[ARGPOS(5)]));
sync = (is_atomic ? scheme_true : NULL);
if ((argc > ARGPOS(6))
&& !SCHEME_BOXP(argv[ARGPOS(6)])
&& !scheme_check_proc_arity2(NULL, 1, ARGPOS(6), argc, argv, 1))
scheme_wrong_contract(who, "(or/c #f (procedure-arity-includes/c 0) box?)", ARGPOS(6), argc, argv);
if (curry) { if (curry) {
/* all checks are done */ /* all checks are done */
@ -3559,6 +3561,7 @@ static Scheme_Object *ffi_callback_or_curry(const char *who, int curry, int argc
do_callback = ffi_queue_callback; do_callback = ffi_queue_callback;
} else } else
do_callback = ffi_do_callback; do_callback = ffi_do_callback;
/* malloc space for everything needed, so a single free gets rid of this */ /* malloc space for everything needed, so a single free gets rid of this */
cl_cif_args = scheme_malloc_code(sizeof(closure_and_cif) + nargs*sizeof(ffi_cif*)); cl_cif_args = scheme_malloc_code(sizeof(closure_and_cif) + nargs*sizeof(ffi_cif*));
scheme_thread_code_start_write(); scheme_thread_code_start_write();

View File

@ -108,7 +108,7 @@
(when xpatch-path (when xpatch-path
(load xpatch-path)) (load xpatch-path))
(time (define (compile-it)
(cond (cond
[whole-program? [whole-program?
(unless (= 1 (length deps)) (unless (= 1 (length deps))
@ -150,4 +150,6 @@
;; Normal mode ;; Normal mode
(compile-file src dest)]))])) (compile-file src dest)]))]))
(time (compile-it))
(printf " ~a bytes peak memory use\n" (maximum-memory-bytes)) (printf " ~a bytes peak memory use\n" (maximum-memory-bytes))

View File

@ -1517,15 +1517,15 @@
(ffi-call p in-types out-type #f #f #f)] (ffi-call p in-types out-type #f #f #f)]
[(p in-types out-type abi) [(p in-types out-type abi)
(ffi-call p in-types out-type abi #f #f #f)] (ffi-call p in-types out-type abi #f #f #f)]
[(p in-types out-type abi varargs-after) [(p in-types out-type abi save-errno)
(ffi-call p in-types out-type abi varargs-after #f #f)] (ffi-call p in-types out-type abi save-errno #f #f)]
[(p in-types out-type abi varargs-after save-errno) [(p in-types out-type abi save-errno orig-place?)
(ffi-call p in-types out-type abi varargs-after save-errno #f)] (ffi-call p in-types out-type abi save-errno orig-place? #f #f)]
[(p in-types out-type abi varargs-after save-errno orig-place?) [(p in-types out-type abi save-errno orig-place? lock-name)
(ffi-call p in-types out-type abi varargs-after save-errno orig-place? #f)] (ffi-call p in-types out-type abi save-errno orig-place? lock-name #f #f)]
[(p in-types out-type abi varargs-after save-errno orig-place? lock-name) [(p in-types out-type abi save-errno orig-place? lock-name blocking?)
(ffi-call p in-types out-type abi varargs-after save-errno orig-place? lock-name #f)] (ffi-call p in-types out-type abi save-errno orig-place? lock-name blocking? #f)]
[(p in-types out-type abi varargs-after save-errno orig-place? lock-name blocking?) [(p in-types out-type abi save-errno orig-place? lock-name blocking? varargs-after)
(check who cpointer? p) (check who cpointer? p)
(check-ffi-call who in-types out-type abi varargs-after save-errno lock-name) (check-ffi-call who in-types out-type abi varargs-after save-errno lock-name)
((ffi-call/callable #t in-types out-type abi varargs-after save-errno lock-name blocking? orig-place? #f #f) p)])) ((ffi-call/callable #t in-types out-type abi varargs-after save-errno lock-name blocking? orig-place? #f #f) p)]))
@ -1536,15 +1536,15 @@
(ffi-call-maker in-types out-type #f #f #f #f)] (ffi-call-maker in-types out-type #f #f #f #f)]
[(in-types out-type abi) [(in-types out-type abi)
(ffi-call-maker in-types out-type abi #f #f #f)] (ffi-call-maker in-types out-type abi #f #f #f)]
[(in-types out-type abi varargs-after) [(in-types out-type abi save-errno)
(ffi-call-maker in-types out-type abi varargs-after #f #f)] (ffi-call-maker in-types out-type abi save-errno #f #f)]
[(in-types out-type abi varargs-after save-errno) [(in-types out-type abi save-errno orig-place?)
(ffi-call-maker in-types out-type abi varargs-after save-errno #f)] (ffi-call-maker in-types out-type abi save-errno orig-place? #f #f)]
[(in-types out-type abi varargs-after save-errno orig-place?) [(in-types out-type abi save-errno orig-place? lock-name)
(ffi-call-maker in-types out-type abi varargs-after save-errno orig-place? #f)] (ffi-call-maker in-types out-type abi save-errno orig-place? lock-name #f #f)]
[(in-types out-type abi varargs-after save-errno orig-place? lock-name) [(in-types out-type abi save-errno orig-place? lock-name blocking?)
(ffi-call-maker in-types out-type abi varargs-after save-errno orig-place? lock-name #f)] (ffi-call-maker in-types out-type abi save-errno orig-place? lock-name blocking? #f)]
[(in-types out-type abi varargs-after save-errno orig-place? lock-name blocking?) [(in-types out-type abi save-errno orig-place? lock-name blocking? varargs-after)
(check-ffi-call who in-types out-type abi varargs-after save-errno lock-name) (check-ffi-call who in-types out-type abi varargs-after save-errno lock-name)
(ffi-call/callable #t in-types out-type abi varargs-after save-errno lock-name blocking? orig-place? #f #f)])) (ffi-call/callable #t in-types out-type abi varargs-after save-errno lock-name blocking? orig-place? #f #f)]))
@ -1940,11 +1940,11 @@
(ffi-callback proc in-types out-type #f #f #f #f)] (ffi-callback proc in-types out-type #f #f #f #f)]
[(proc in-types out-type abi) [(proc in-types out-type abi)
(ffi-callback proc in-types out-type abi #f #f #f)] (ffi-callback proc in-types out-type abi #f #f #f)]
[(proc in-types out-type abi varargs-after) [(proc in-types out-type abi atomic?)
(ffi-callback proc in-types out-type abi varargs-after #f #f)] (ffi-callback proc in-types out-type abi atomic? #f #f)]
[(proc in-types out-type abi varargs-after atomic?) [(proc in-types out-type abi atomic? async-apply)
(ffi-callback proc in-types out-type abi varargs-after atomic? #f)] (ffi-callback proc in-types out-type abi atomic? #f)]
[(proc in-types out-type abi varargs-after atomic? async-apply) [(proc in-types out-type abi atomic? async-apply varargs-after)
(check who procedure? proc) (check who procedure? proc)
(check-ffi-callback who in-types out-type abi varargs-after async-apply) (check-ffi-callback who in-types out-type abi varargs-after async-apply)
((ffi-callback-maker* in-types out-type abi varargs-after atomic? async-apply) proc)])) ((ffi-callback-maker* in-types out-type abi varargs-after atomic? async-apply) proc)]))
@ -1955,11 +1955,11 @@
(ffi-callback-maker in-types out-type #f #f #f #f)] (ffi-callback-maker in-types out-type #f #f #f #f)]
[(in-types out-type abi) [(in-types out-type abi)
(ffi-callback-maker in-types out-type abi #f #f #f)] (ffi-callback-maker in-types out-type abi #f #f #f)]
[(in-types out-type abi varargs-after) [(in-types out-type abi atomic?)
(ffi-callback-maker in-types out-type abi varargs-after #f #f)] (ffi-callback-maker in-types out-type abi atomic? #f #f)]
[(in-types out-type abi varargs-after atomic?) [(in-types out-type abi atomic? async-apply)
(ffi-callback-maker in-types out-type abi varargs-after atomic? #f)] (ffi-callback-maker in-types out-type abi atomic? async-apply #f)]
[(in-types out-type abi varargs-after atomic? async-apply) [(in-types out-type abi atomic? async-apply varargs-after)
(check-ffi-callback who in-types out-type abi varargs-after async-apply) (check-ffi-callback who in-types out-type abi varargs-after async-apply)
(ffi-callback-maker* in-types out-type abi varargs-after atomic? async-apply)])) (ffi-callback-maker* in-types out-type abi varargs-after atomic? async-apply)]))

View File

@ -16,7 +16,7 @@
#define MZSCHEME_VERSION_X 7 #define MZSCHEME_VERSION_X 7
#define MZSCHEME_VERSION_Y 9 #define MZSCHEME_VERSION_Y 9
#define MZSCHEME_VERSION_Z 0 #define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 16 #define MZSCHEME_VERSION_W 17
/* A level of indirection makes `#` work as needed: */ /* A level of indirection makes `#` work as needed: */
#define AS_a_STR_HELPER(x) #x #define AS_a_STR_HELPER(x) #x