From 17ce827d8e0b1891e58852f9bcae180d9ef535c6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 13 Aug 2016 01:42:58 -0400 Subject: [PATCH] Issue #3 - Allow compiling a pure varargs lambda --- scheme/cyclone/cgen.sld | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/scheme/cyclone/cgen.sld b/scheme/cyclone/cgen.sld index 219ba64d..1cb5f953 100644 --- a/scheme/cyclone/cgen.sld +++ b/scheme/cyclone/cgen.sld @@ -982,18 +982,23 @@ ; c-compile-formals : list[symbol] -> string (define (c-compile-formals formals type) - (if (not (pair? formals)) - "" - (string-append - "object " - (mangle (car formals)) - (cond - ((pair? (cdr formals)) - (string-append ", " (c-compile-formals (cdr formals) type))) - ((not (equal? 'args:fixed type)) - (string-append ", object " (mangle (cdr formals)) "_raw, ...")) - (else - ""))))) + (cond + ((and (not (pair? formals)) + (equal? type 'args:varargs)) + (string-append "object " (mangle formals) "_raw, ...")) + ((not (pair? formals)) + "") + (else + (string-append + "object " + (mangle (car formals)) + (cond + ((pair? (cdr formals)) + (string-append ", " (c-compile-formals (cdr formals) type))) + ((not (equal? 'args:fixed type)) + (string-append ", object " (mangle (cdr formals)) "_raw, ...")) + (else + "")))))) ; c-compile-lambda : lamda-exp (string -> void) -> (string -> string) (define (c-compile-lambda exp trace)