Issue #206 - Fix cyc-seq, and only do it as an optimization

This commit is contained in:
Justin Ethier 2017-07-18 17:41:33 -04:00
parent a8c5c559d3
commit f2db6235e0
2 changed files with 12 additions and 4 deletions

View file

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

View file

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