Unbox literals at expansion time.

This commit is contained in:
Vincent St-Amour 2010-08-04 11:02:33 -04:00
parent bdf84f371d
commit 1105e70b30

View File

@ -256,6 +256,31 @@
#:with (bindings ...) #'()) #:with (bindings ...) #'())
;; else, do the unboxing here ;; else, do the unboxing here
;; we can unbox literals right away
(pattern (quote n)
#:when (let ((x (syntax->datum #'n)))
(and (number? x)
(not (eq? (imag-part x) 0))))
#:with real-binding (unboxed-gensym)
#:with imag-binding (unboxed-gensym)
#:with (bindings ...)
(let ((n (syntax->datum #'n)))
#`(((real-binding) #,(datum->syntax
#'here
(exact->inexact (real-part n))))
((imag-binding) #,(datum->syntax
#'here
(exact->inexact (imag-part n)))))))
(pattern (quote n)
#:when (real? (syntax->datum #'n))
#:with real-binding (unboxed-gensym)
#:with imag-binding #f
#:with (bindings ...)
#`(((real-binding) #,(datum->syntax
#'here
(exact->inexact (syntax->datum #'n))))))
(pattern e:expr (pattern e:expr
#:when (isoftype? #'e -InexactComplex) #:when (isoftype? #'e -InexactComplex)
#:with e* (unboxed-gensym) #:with e* (unboxed-gensym)