From f2db6235e07f2f3049b35837fd57bc47df78d802 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 18 Jul 2017 17:41:33 -0400 Subject: [PATCH] Issue #206 - Fix cyc-seq, and only do it as an optimization --- cyclone.scm | 4 ++-- scheme/cyclone/cps-optimizations.sld | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cyclone.scm b/cyclone.scm index 8e1c1286..f8b5a3c0 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -406,12 +406,12 @@ ((define? expr) ;; Global `(define ,(define->var expr) - ,@(caddr (closure-convert (define->exp expr) globals)))) + ,@(caddr (closure-convert (define->exp expr) globals *optimization-level*)))) ((define-c? expr) expr) (else (caddr ;; Strip off superfluous lambda - (closure-convert expr globals))))) + (closure-convert expr globals *optimization-level*))))) input-program)) ; (caddr ;; Strip off superfluous lambda ; (closure-convert input-program))) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index f78f02be..a328831b 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -1441,7 +1441,13 @@ (else (loop (cdr lst) (+ i 1)))))) -(define (closure-convert exp globals) +(define (closure-convert exp globals . opts) + (let ((optimization-level 2)) + (if (pair? opts) + (set! optimization-level (car opts))) + (_closure-convert exp globals optimization-level))) + +(define (_closure-convert exp globals optimization-level) (define (convert exp self-var free-var-lst) (define (cc exp) (cond @@ -1491,7 +1497,9 @@ (cond ;; If the lambda argument is not used, flag so the C code is ;; all generated within the same function - ((and (eq? (lambda-formals-type fn) 'args:fixed) + ((and (> optimization-level 0) + (eq? (lambda-formals-type fn) 'args:fixed) + (pair? (lambda-formals->list fn)) (with-var (car (lambda-formals->list fn)) (lambda (var)