diff --git a/racketscript-compiler/racketscript/compiler/assembler.rkt b/racketscript-compiler/racketscript/compiler/assembler.rkt index 952d497d..684bbdd2 100644 --- a/racketscript-compiler/racketscript/compiler/assembler.rkt +++ b/racketscript-compiler/racketscript/compiler/assembler.rkt @@ -308,6 +308,7 @@ [+nan.0 (emit "NaN")] [+nan.f (emit "NaN")] [_ #:when (single-flonum? v) (emit (~a (exact->inexact (inexact->exact v))))] + [_ #:when (zero? v) (emit (~a 0))] [_ (emit (~a v))])] ;; TODO [(boolean? v) (emit (if v "true" "false"))] [(void? v) diff --git a/racketscript-compiler/racketscript/compiler/transform.rkt b/racketscript-compiler/racketscript/compiler/transform.rkt index 6d2e72d7..e8ef478c 100644 --- a/racketscript-compiler/racketscript/compiler/transform.rkt +++ b/racketscript-compiler/racketscript/compiler/transform.rkt @@ -667,6 +667,11 @@ (void? d) (real? d)) (ILValue d)] + [(and (number? d) (zero? d)) (ILValue d)] ; some zero values are not real, eg 0.0+0.0i + [(and (number? d) (not (real? d))) ;; FIXME with real complex num implementation + (ILApp (name-in-module 'core 'Pair.make) + (list (ILValue (real-part d)) + (ILValue (imag-part d))))] [else (error (~a "unsupported value" d))])) (: expand-normal-case-lambda (-> (Listof PlainLambda) diff --git a/tests/basic/complex.rkt b/tests/basic/complex.rkt new file mode 100644 index 00000000..d19f654b --- /dev/null +++ b/tests/basic/complex.rkt @@ -0,0 +1,13 @@ +#lang racket/base + +;; zeros +(displayln 0+0i) ; prints as 0 +; (displayln 0+0.0i) ; prints as 0.0+0.0i +(when (zero? 0+0.0i) + (displayln 0)) +; (displayln 0.0+0i) ; prints as 0.0 +(when (zero? 0.0+0i) + (displayln 0)) +; (displayln 0.0+0.0i) ; prints as 0.0+0.0i +(when (zero? 0.0+0.0i) + (displayln 0))