Fixed a bug that caused the let optimizations to choke on TR-introduced code.

This commit is contained in:
Vincent St-Amour 2010-07-29 11:50:40 -04:00
parent f08456cf07
commit b58461da2d

View File

@ -66,6 +66,10 @@
;; this covers loop variables ;; this covers loop variables
(partition (partition
(lambda (p) (lambda (p)
(and
;; typed racket introduces let-values that bind no values
;; we can't optimize these
(not (null? (syntax-e (car p))))
(let ((fun-name (car (syntax-e (car p))))) (let ((fun-name (car (syntax-e (car p)))))
(and (and
;; if the function escapes, we can't change it's interface ;; if the function escapes, we can't change it's interface
@ -105,7 +109,7 @@
(loop unboxed (cons i boxed) (loop unboxed (cons i boxed)
(add1 i) (cdr params) (cdr doms))]))] (add1 i) (cdr params) (cdr doms))]))]
[_ #f])] [_ #f])]
[_ #f])))) [_ #f])))))
rest))) rest)))
(list candidates function-candidates others)) (list candidates function-candidates others))
#:with (opt-candidates:unboxed-let-clause ...) #'(candidates ...) #:with (opt-candidates:unboxed-let-clause ...) #'(candidates ...)