mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
WIP
This commit is contained in:
parent
82d6379cdf
commit
3a9777735a
1 changed files with 27 additions and 17 deletions
|
@ -15,43 +15,53 @@
|
|||
(cdr expr))
|
||||
`(Cyc-foreign-code ,@(cdr expr)))))
|
||||
|
||||
(pretty-print
|
||||
(
|
||||
;(define-syntax define-foreign-code
|
||||
; (er-macro-transformer
|
||||
;(pretty-print
|
||||
;(
|
||||
(define-syntax define-foreign-code
|
||||
(er-macro-transformer
|
||||
(lambda (expr rename compare)
|
||||
(let* ((scm-fnc (cadr expr))
|
||||
(c-fnc (cadddr expr))
|
||||
(rv-type (caddr expr))
|
||||
(arg-types (cddddr expr))
|
||||
(arg-syms
|
||||
(arg-syms/unbox
|
||||
(map
|
||||
(lambda (type)
|
||||
(mangle (gensym type)))
|
||||
(let ((var (mangle (gensym 'arg))))
|
||||
(cons var (string-append "string_str(" var ")"))))
|
||||
arg-types))
|
||||
(arg-strings
|
||||
(map
|
||||
(lambda (sym)
|
||||
(string-append " object " sym)
|
||||
)
|
||||
arg-syms))
|
||||
;(arg-strings
|
||||
; (map
|
||||
; (lambda (sym)
|
||||
; (string-append " object " sym)
|
||||
; )
|
||||
; arg-syms))
|
||||
|
||||
; TODO: append mangled args to other args
|
||||
; cyclone> (string-join '("a" "b" "c") ",")
|
||||
; "a,b,c"
|
||||
|
||||
(args "(void *data, int argc, closure _, object k)")
|
||||
(args (string-append
|
||||
"(void *data, int argc, closure _, object k "
|
||||
(apply string-append
|
||||
(map
|
||||
(lambda (sym/unbox)
|
||||
(string-append "," (car sym/unbox)))
|
||||
arg-syms/unbox))
|
||||
")"))
|
||||
(body
|
||||
;; TODO: need to unbox all args, pass to C function, then box up the result
|
||||
(string-append
|
||||
"return_closcall1(data, k, obj_int2obj(" "str" "));"))
|
||||
"return_closcall1(data, k, obj_int2obj(" c-fnc "(" (string-join (map cdr arg-syms/unbox) ",") ")));"))
|
||||
)
|
||||
`((define-c ,scm-fnc ,args ,body)
|
||||
)))
|
||||
'(define-foreign-lambda scm-strlen int "strlen" string dummy dummy)
|
||||
list
|
||||
list)
|
||||
; '(define-foreign-lambda scm-strlen int "strlen" string)
|
||||
; list
|
||||
; list)
|
||||
)
|
||||
(define-foreign-lambda scm-strlen int "strlen" string)
|
||||
(display (scm-strlen "testing 1, 2, 3"))
|
||||
(newline)
|
||||
|
||||
;(define-c foreign-value
|
||||
|
|
Loading…
Add table
Reference in a new issue