Putting this here so it doesn't get lost.

Evan
>From 8e226395197515fe5aac0ac6e0bf3a17a7584394 Mon Sep 17 00:00:00 2001
From: Evan Hanson <ev...@foldling.org>
Date: Thu, 27 Jun 2019 16:34:36 +1200
Subject: [PATCH] Emit C99 constants for +nan.0 and [+-]inf.0 `##core#float'
 nodes

The unboxing pass added in 79cf7427 introduces a `##core#float' type to
the closure-converted language, for which floating point literals are
emitted inline. This also needs to handle NaN and infinite values. For
these, we use the NAN and INFINITY constants defined by C99.

Fixes #1626.
---
 c-backend.scm | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/c-backend.scm b/c-backend.scm
index 2ef2337f..a7783379 100644
--- a/c-backend.scm
+++ b/c-backend.scm
@@ -127,7 +127,12 @@
                   (gen "lf[" (first params) #\])) ) )
 
             ((##core#float)
-             (gen (first params)))
+            (let ((n (first params)))
+              (cond ((nan? n) (gen "NAN"))
+                    ((infinite? n)
+                     (when (negative? n) (gen #\-))
+                     (gen "INFINITY"))
+                    (else (gen n)))))
 
            ((if)
             (gen #t "if(C_truep(")
-- 
2.21.0

_______________________________________________
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers

Reply via email to