~ chicken-core (chicken-5) 90e27f3bca6a79d0cf30d7b7ceba73d1d6751f75
commit 90e27f3bca6a79d0cf30d7b7ceba73d1d6751f75 Author: megane <meganeka@gmail.com> AuthorDate: Sun Dec 1 09:50:18 2019 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Fri Dec 27 10:43:21 2019 -0600 chicken-ffi-syntax.scm: Convert foreign-primitive to use annotate-foreign-procedure Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/chicken-ffi-syntax.scm b/chicken-ffi-syntax.scm index e11a6a28..b6ec4d5b 100644 --- a/chicken-ffi-syntax.scm +++ b/chicken-ffi-syntax.scm @@ -217,8 +217,11 @@ `(##core#the (procedure ,(map (cut chicken.compiler.support#foreign-type->scrutiny-type <> 'arg) (chicken.syntax#strip-syntax argtypes)) - ,(chicken.compiler.support#foreign-type->scrutiny-type - (chicken.syntax#strip-syntax rtype) 'result)) + ,@(if rtype + (list (chicken.compiler.support#foreign-type->scrutiny-type + (chicken.syntax#strip-syntax rtype) 'result)) + ;; special case for C_values(...). Only triggered by foreign-primitive. + '*)) #f ,e)) @@ -245,17 +248,12 @@ (lambda (form r c) (##sys#check-syntax 'foreign-primitive form '(_ _ . _)) (let* ((hasrtype (and (pair? (cddr form)) (not (string? (caddr form))))) - (rtype (and hasrtype (chicken.syntax#strip-syntax (cadr form)))) - (args (chicken.syntax#strip-syntax (if hasrtype (caddr form) (cadr form)))) + (rtype (and hasrtype (cadr form))) + (args (if hasrtype (caddr form) (cadr form))) (argtypes (map car args))) - `(##core#the (procedure - ,(map (cut chicken.compiler.support#foreign-type->scrutiny-type <> 'arg) - argtypes) - ,@(if (not rtype) - '* ; special case for C_values(...) - (list (chicken.compiler.support#foreign-type->scrutiny-type rtype 'result)))) - #f - (##core#foreign-primitive ,@(cdr form))))))) + (annotate-foreign-procedure `(##core#foreign-primitive ,@(cdr form)) + argtypes + rtype))))) (##sys#extend-macro-environment 'foreign-lambdaTrap