Unpack args array

This commit is contained in:
Justin Ethier 2021-02-09 22:39:57 -05:00
parent d162dd8fbc
commit f7fe5dbf11

View file

@ -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)