mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-21 22:59:16 +02:00
Compile macros as the macro_type
This commit is contained in:
parent
894dc6b6d2
commit
e69c21eb16
2 changed files with 24 additions and 13 deletions
|
@ -182,6 +182,8 @@
|
||||||
"\");\n"
|
"\");\n"
|
||||||
)))
|
)))
|
||||||
|
|
||||||
|
(define (st:->var trace)
|
||||||
|
(cdr trace))
|
||||||
;; END st helpers
|
;; END st helpers
|
||||||
|
|
||||||
;;; Compilation routines.
|
;;; Compilation routines.
|
||||||
|
@ -987,6 +989,7 @@
|
||||||
(closure->fv exp))) ; Note these are not necessarily symbols, but in cc form
|
(closure->fv exp))) ; Note these are not necessarily symbols, but in cc form
|
||||||
(cv-name (mangle (gensym 'c)))
|
(cv-name (mangle (gensym 'c)))
|
||||||
(lid (allocate-lambda (c-compile-lambda lam trace)))
|
(lid (allocate-lambda (c-compile-lambda lam trace)))
|
||||||
|
(macro? (assoc (st:->var trace) (get-macros)))
|
||||||
(create-nclosure (lambda ()
|
(create-nclosure (lambda ()
|
||||||
(string-append
|
(string-append
|
||||||
"closureN_type " cv-name ";\n"
|
"closureN_type " cv-name ";\n"
|
||||||
|
@ -1005,8 +1008,15 @@
|
||||||
(car vars) ";\n"
|
(car vars) ";\n"
|
||||||
(loop (+ i 1) (cdr vars))))))))
|
(loop (+ i 1) (cdr vars))))))))
|
||||||
(create-mclosure (lambda ()
|
(create-mclosure (lambda ()
|
||||||
|
(let ((prefix
|
||||||
|
(if macro?
|
||||||
|
"mmacro"
|
||||||
(string-append
|
(string-append
|
||||||
"mclosure" (number->string (length free-vars)) "(" cv-name ", "
|
"mclosure"
|
||||||
|
(number->string (length free-vars))))))
|
||||||
|
(string-append
|
||||||
|
prefix
|
||||||
|
"(" cv-name ", "
|
||||||
;; NOTE:
|
;; NOTE:
|
||||||
;; Hopefully will not cause issues with varargs when casting to
|
;; Hopefully will not cause issues with varargs when casting to
|
||||||
;; generic function type below. Works fine in gcc, not sure if
|
;; generic function type below. Works fine in gcc, not sure if
|
||||||
|
@ -1016,7 +1026,8 @@
|
||||||
(string-join free-vars ", ")
|
(string-join free-vars ", ")
|
||||||
");"
|
");"
|
||||||
cv-name ".num_args = " (number->string (compute-num-args lam)) ";"
|
cv-name ".num_args = " (number->string (compute-num-args lam)) ";"
|
||||||
))))
|
)))))
|
||||||
|
;(trace:info (list 'JAE-DEBUG trace macro?))
|
||||||
(c-code/vars
|
(c-code/vars
|
||||||
(string-append "&" cv-name)
|
(string-append "&" cv-name)
|
||||||
(list
|
(list
|
||||||
|
|
|
@ -47,4 +47,4 @@
|
||||||
(define x 1)
|
(define x 1)
|
||||||
(write x)
|
(write x)
|
||||||
(write
|
(write
|
||||||
(eval 'x))
|
(eval '(or 1 2 x)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue