mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-14 08:17:35 +02:00
Allow c-values to support ret-convert from c-define-type
This commit is contained in:
parent
4a6919e153
commit
ab6ee6c16d
2 changed files with 13 additions and 4 deletions
|
@ -32,7 +32,7 @@
|
|||
(er-macro-transformer
|
||||
(lambda (expr rename compare)
|
||||
(let ((name (cadr expr))
|
||||
(type (caddr expr)))
|
||||
(type (cddr expr)))
|
||||
(unless (eval '(with-handler (lambda X #f) *foreign-types*))
|
||||
(write "no foreign type table" (current-error-port))
|
||||
(newline (current-error-port))
|
||||
|
@ -49,18 +49,26 @@
|
|||
(lambda X #f)
|
||||
(hash-table-ref *foreign-types* (quote ,type-arg))
|
||||
)))
|
||||
(c-ret-convert #f)
|
||||
)
|
||||
(when c-type
|
||||
(write `(defined c type ,c-type) (current-error-port))
|
||||
(newline (current-error-port))
|
||||
(set! type-arg c-type))
|
||||
(set! type-arg (car c-type))
|
||||
(if (= 3 (length c-type))
|
||||
(set! c-ret-convert (caddr c-type))))
|
||||
|
||||
;(for-each
|
||||
; (lambda (arg)
|
||||
; (if (not (string? arg))
|
||||
; (error "c-value" "Invalid argument: string expected, received " arg)))
|
||||
; (cdr expr))
|
||||
`((lambda () (Cyc-foreign-value ,code-arg ,(symbol->string type-arg))))))))
|
||||
|
||||
(if c-ret-convert
|
||||
`((lambda () (,c-ret-convert (Cyc-foreign-value ,code-arg ,(symbol->string type-arg)))))
|
||||
`((lambda () (Cyc-foreign-value ,code-arg ,(symbol->string type-arg))))
|
||||
)
|
||||
))))
|
||||
|
||||
(define-syntax c-code
|
||||
(er-macro-transformer
|
||||
|
|
|
@ -12,11 +12,12 @@
|
|||
(define *my-global* #f)
|
||||
|
||||
(c-define-type my-integer integer)
|
||||
(c-define-type my-integer2 integer)
|
||||
(c-define-type my-integer-as-string integer string->number number->string)
|
||||
|
||||
(test-group "foreign value"
|
||||
(test 3 (c-value "1 + 2" integer))
|
||||
(test 4 (c-value "2 + 2" my-integer))
|
||||
(test "4" (c-value "2 + 2" my-integer-as-string))
|
||||
)
|
||||
|
||||
(test-group "foreign code"
|
||||
|
|
Loading…
Add table
Reference in a new issue