Support custom arg types in c-define

This commit is contained in:
Justin Ethier 2020-05-11 22:33:07 -04:00
parent fd8cb32e46
commit ec63593324
2 changed files with 14 additions and 2 deletions

View file

@ -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))

View file

@ -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"))
)