mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 12:35:05 +02:00
WIP
This commit is contained in:
parent
dfde2007b8
commit
7c2da7b4fd
1 changed files with 34 additions and 13 deletions
|
@ -1,4 +1,7 @@
|
||||||
(import (scheme base) (scheme write))
|
(import
|
||||||
|
(scheme base)
|
||||||
|
(scheme write)
|
||||||
|
(scheme cyclone pretty-print))
|
||||||
|
|
||||||
(define-syntax foreign-code
|
(define-syntax foreign-code
|
||||||
(er-macro-transformer
|
(er-macro-transformer
|
||||||
|
@ -10,23 +13,41 @@
|
||||||
(cdr expr))
|
(cdr expr))
|
||||||
`(Cyc-foreign-code ,@(cdr expr)))))
|
`(Cyc-foreign-code ,@(cdr expr)))))
|
||||||
|
|
||||||
(define-syntax define-foreign-code
|
(pretty-print
|
||||||
(er-macro-transformer
|
(
|
||||||
|
;(define-syntax define-foreign-code
|
||||||
|
; (er-macro-transformer
|
||||||
(lambda (expr rename compare)
|
(lambda (expr rename compare)
|
||||||
(let* ((scm-fnc (cadr expr))
|
(let* ((scm-fnc (cadr expr))
|
||||||
(c-fnc (cadddr expr))
|
(c-fnc (cadddr expr))
|
||||||
(rv-type (caddr expr))
|
(rv-type (caddr expr))
|
||||||
(arg-types (cddddr expr))
|
(arg-types (cddddr expr))
|
||||||
; (str (symbol->string sym))
|
(arg-syms (map gensym arg-types)) ;; TODO: need mangled strings, no syms!!!
|
||||||
; (lib_fnc_str (string-append "_" str))
|
(arg-mangled "TODO") ;; TODO: convert above
|
||||||
; (lib_fnc (string->symbol lib_fnc_str)) ;; Internal library function
|
(arg-strings
|
||||||
; (args "(void *data, int argc, closure _, object k)")
|
(map
|
||||||
; (body
|
(lambda (sym)
|
||||||
; (string-append
|
(string-append " object " sym)
|
||||||
; "return_closcall1(data, k, obj_int2obj(" str "));"))
|
)
|
||||||
|
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)")
|
||||||
|
(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" "));"))
|
||||||
)
|
)
|
||||||
`((define-c ,lib_fnc ,args ,body)
|
`((define-c ,scm-fnc ,args ,body)
|
||||||
)))))
|
)))
|
||||||
|
'(define-foreign-lambda scm-strlen int "strlen" string dummy dummy)
|
||||||
|
list
|
||||||
|
list)
|
||||||
|
)
|
||||||
|
(newline)
|
||||||
|
|
||||||
;(define-c foreign-value
|
;(define-c foreign-value
|
||||||
; "(void *data, int argc, closure _, object k, object code, object type)"
|
; "(void *data, int argc, closure _, object k, object code, object type)"
|
||||||
|
@ -34,7 +55,7 @@
|
||||||
; return_closcall1(data, k, obj_int2obj(code
|
; return_closcall1(data, k, obj_int2obj(code
|
||||||
; ")
|
; ")
|
||||||
|
|
||||||
(define-foreign-lambda scm-strlen int "strlen" string)
|
;(define-foreign-lambda scm-strlen int "strlen" string)
|
||||||
|
|
||||||
;(write (Cyc-foreign-value "errno" "3"))
|
;(write (Cyc-foreign-value "errno" "3"))
|
||||||
;(newline)
|
;(newline)
|
||||||
|
|
Loading…
Add table
Reference in a new issue