~ chicken-core (chicken-5) 45d0b9391f663ba80b6f1739857885c68520d3bc
commit 45d0b9391f663ba80b6f1739857885c68520d3bc
Author: megane <meganeka@gmail.com>
AuthorDate: Sun Dec 1 09:23:29 2019 +0200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Fri Dec 27 10:43:12 2019 -0600
chicken-ffi-syntax.scm: Add annotate-foreign-procedure helper function
Signed-off-by: Evan Hanson <evhan@foldling.org>
diff --git a/chicken-ffi-syntax.scm b/chicken-ffi-syntax.scm
index 1ba5348b..e11a6a28 100644
--- a/chicken-ffi-syntax.scm
+++ b/chicken-ffi-syntax.scm
@@ -213,6 +213,15 @@
;;; Aliases for internal forms
+(define (annotate-foreign-procedure e argtypes rtype)
+ `(##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))
+ #f
+ ,e))
+
(##sys#extend-macro-environment
'define-foreign-type
'()
@@ -254,13 +263,9 @@
(compiler-only-er-transformer
(lambda (form r c)
(##sys#check-syntax 'foreign-lambda form '(_ _ _ . _))
- `(##core#the
- (procedure ,(map (cut chicken.compiler.support#foreign-type->scrutiny-type <> 'arg)
- (chicken.syntax#strip-syntax (cdddr form)))
- ,(chicken.compiler.support#foreign-type->scrutiny-type
- (chicken.syntax#strip-syntax (cadr form)) 'result))
- #f
- (##core#foreign-lambda ,@(cdr form))))))
+ (annotate-foreign-procedure `(##core#foreign-lambda ,@(cdr form))
+ (cdddr form)
+ (cadr form)))))
(##sys#extend-macro-environment
'foreign-lambda*
@@ -268,16 +273,9 @@
(compiler-only-er-transformer
(lambda (form r c)
(##sys#check-syntax 'foreign-lambda* form '(_ _ _ _ . _))
- `(##core#the
- (procedure ,(map (lambda (a)
- (chicken.compiler.support#foreign-type->scrutiny-type
- (car a)
- 'arg))
- (chicken.syntax#strip-syntax (caddr form)))
- ,(chicken.compiler.support#foreign-type->scrutiny-type
- (chicken.syntax#strip-syntax (cadr form)) 'result))
- #f
- (##core#foreign-lambda* ,@(cdr form))))))
+ (annotate-foreign-procedure `(##core#foreign-lambda* ,@(cdr form))
+ (map car (caddr form))
+ (cadr form)))))
(##sys#extend-macro-environment
'foreign-safe-lambda
@@ -285,13 +283,9 @@
(compiler-only-er-transformer
(lambda (form r c)
(##sys#check-syntax 'foreign-safe-lambda form '(_ _ _ . _))
- `(##core#the
- (procedure ,(map (cut chicken.compiler.support#foreign-type->scrutiny-type <> 'arg)
- (chicken.syntax#strip-syntax (cdddr form)))
- ,(chicken.compiler.support#foreign-type->scrutiny-type
- (chicken.syntax#strip-syntax (cadr form)) 'result))
- #f
- (##core#foreign-safe-lambda ,@(cdr form))))))
+ (annotate-foreign-procedure `(##core#foreign-safe-lambda ,@(cdr form))
+ (cdddr form)
+ (cadr form)))))
(##sys#extend-macro-environment
'foreign-safe-lambda*
@@ -299,14 +293,9 @@
(compiler-only-er-transformer
(lambda (form r c)
(##sys#check-syntax 'foreign-safe-lambda* form '(_ _ _ _ . _))
- `(##core#the
- (procedure ,(map (lambda (a)
- (chicken.compiler.support#foreign-type->scrutiny-type (car a) 'arg))
- (chicken.syntax#strip-syntax (caddr form)))
- ,(chicken.compiler.support#foreign-type->scrutiny-type
- (chicken.syntax#strip-syntax (cadr form)) 'result))
- #f
- (##core#foreign-safe-lambda* ,@(cdr form))))))
+ (annotate-foreign-procedure `(##core#foreign-safe-lambda* ,@(cdr form))
+ (map car (caddr form))
+ (cadr form)))))
(##sys#extend-macro-environment
'foreign-type-size
Trap