mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-20 14:19:17 +02:00
Unpack args array
This commit is contained in:
parent
d162dd8fbc
commit
f7fe5dbf11
1 changed files with 23 additions and 2 deletions
|
@ -1813,7 +1813,28 @@
|
||||||
"(void *data, " arg-argc
|
"(void *data, " arg-argc
|
||||||
formals*
|
formals*
|
||||||
")"))))
|
")"))))
|
||||||
(c-arg-unpacking formals)
|
(c-arg-unpacking ;; Unpack args array into locals
|
||||||
|
(cond
|
||||||
|
;; TODO: how to unpack varargs
|
||||||
|
(cps?
|
||||||
|
(let ((i 0)
|
||||||
|
(cstr "")
|
||||||
|
(args (string-split formals #\,)))
|
||||||
|
(for-each
|
||||||
|
(lambda (arg)
|
||||||
|
(set! cstr (string-append
|
||||||
|
cstr
|
||||||
|
arg
|
||||||
|
" = args["
|
||||||
|
(number->string i)
|
||||||
|
"];"
|
||||||
|
))
|
||||||
|
(set! i (+ i 1)))
|
||||||
|
(if has-closure?
|
||||||
|
(cdr args)
|
||||||
|
args))
|
||||||
|
cstr))
|
||||||
|
(else "")))
|
||||||
(env-closure (lambda->env exp))
|
(env-closure (lambda->env exp))
|
||||||
(body (c-compile-exp
|
(body (c-compile-exp
|
||||||
(car (ast:lambda-body exp)) ; car ==> assume single expr in lambda body after CPS
|
(car (ast:lambda-body exp)) ; car ==> assume single expr in lambda body after CPS
|
||||||
|
@ -1827,7 +1848,7 @@
|
||||||
(string-append "static " return-type " " name
|
(string-append "static " return-type " " name
|
||||||
c-formals
|
c-formals
|
||||||
" {\n"
|
" {\n"
|
||||||
"UNPACKED: " c-arg-unpacking
|
c-arg-unpacking
|
||||||
"\n"
|
"\n"
|
||||||
preamble
|
preamble
|
||||||
(if (ast:lambda-varargs? exp)
|
(if (ast:lambda-varargs? exp)
|
||||||
|
|
Loading…
Add table
Reference in a new issue