From ec63593324260697c71fb0d447d4e7510476ac8b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 11 May 2020 22:33:07 -0400 Subject: [PATCH] Support custom arg types in c-define --- libs/cyclone/foreign.sld | 13 +++++++++++-- libs/test-foreign.scm | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libs/cyclone/foreign.sld b/libs/cyclone/foreign.sld index 69c3572e..4abe9abf 100644 --- a/libs/cyclone/foreign.sld +++ b/libs/cyclone/foreign.sld @@ -190,10 +190,19 @@ (arg-syms/unbox (map (lambda (type) - (let ((var (mangle (gensym 'arg)))) + (let ((var (mangle (gensym 'arg))) + (arg-cust-type (eval `(with-handler + (lambda X #f) + (hash-table-ref *foreign-types* (quote ,type)) + ))) + ) (cons var - (scm->c var type) + (scm->c + var + (if arg-cust-type + (car arg-cust-type) + type)) ;(string-append "string_str(" var ")") ))) arg-types)) diff --git a/libs/test-foreign.scm b/libs/test-foreign.scm index ad492033..376f06b6 100644 --- a/libs/test-foreign.scm +++ b/libs/test-foreign.scm @@ -11,6 +11,7 @@ (define *my-global* #f) +(c-define-type my-string string) (c-define-type my-integer integer) (c-define-type my-integer-as-string integer string->number number->string) @@ -41,9 +42,11 @@ (c-define scm-strlen-str my-integer-as-string "strlen" string) ;(c-define scm-strlen "int" "strlen" string) (c-define scm-strlend double "strlen" string) +(c-define scm-strlen2 integer "strlen" my-string) (test-group "foreign lambda" (test 15 (scm-strlen "testing 1, 2, 3")) + (test 15 (scm-strlen2 "testing 1, 2, 3")) (test 15.0 (scm-strlend "testing 1, 2, 3")) (test "15" (scm-strlen-str "testing 1, 2, 3")) )