From 0d4d1e738c45f8d5c74864b7605c27028a70e01b Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Wed, 9 Jun 2021 20:02:06 +0200 Subject: [PATCH] Coerce integers to floats/doubles during unparse --- .../racket/preserves/preserves-schema/unparser.rkt | 2 ++ implementations/racket/preserves/preserves/float.rkt | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/implementations/racket/preserves/preserves-schema/unparser.rkt b/implementations/racket/preserves/preserves-schema/unparser.rkt index d5d1752..6d66ffc 100644 --- a/implementations/racket/preserves/preserves-schema/unparser.rkt +++ b/implementations/racket/preserves/preserves-schema/unparser.rkt @@ -14,6 +14,8 @@ (match (unwrap pattern) [(NamedSimplePattern_ n p) (pattern->unparser p (escape n))] [(SimplePattern-any) src-stx] + [(SimplePattern-atom (AtomKind-Float)) `(->float ,src-stx)] + [(SimplePattern-atom (AtomKind-Double)) `(exact->inexact ,src-stx)] [(SimplePattern-atom _) src-stx] [(SimplePattern-embedded _interface) `(embedded ,src-stx)] [(SimplePattern-lit v) `',v] diff --git a/implementations/racket/preserves/preserves/float.rkt b/implementations/racket/preserves/preserves/float.rkt index 66183c2..5b5c930 100644 --- a/implementations/racket/preserves/preserves/float.rkt +++ b/implementations/racket/preserves/preserves/float.rkt @@ -3,6 +3,12 @@ ;; precision (de)serialization. In many circumstances, Racket lacks ;; 32-bit floating point support, and single-flonum? always yields #f. -(provide (struct-out float)) +(provide (struct-out float) + ->float) (struct float (value) #:transparent) + +(define (->float v) + (if (float? v) + v + (float (exact->inexact v))))