mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 17:27:33 +02:00
Issue #206 - Fix cyc-seq, and only do it as an optimization
This commit is contained in:
parent
a8c5c559d3
commit
f2db6235e0
2 changed files with 12 additions and 4 deletions
|
@ -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)))
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue