git.fiddlerwoaroof.com
src/float.lisp
2723b329
 (in-package :cl-user)
 (defpackage yaml.float
   (:use :cl)
11ee2909
   (:export :*float-strategy*
            :not-a-number
            :positive-infinity
            :negative-infinity)
2723b329
   (:documentation "Handle IEEE floating point values."))
 (in-package :yaml.float)
 
 (defparameter *float-strategy* :keyword)
 
 #+sbcl
 (defparameter *sbcl-nan-value*
   (sb-int:with-float-traps-masked (:overflow :invalid :divide-by-zero)
     (- sb-ext:double-float-positive-infinity
        sb-ext:double-float-positive-infinity)))
 
11ee2909
 (defun not-a-number ()
2723b329
   (case *float-strategy*
     (:error
      (error 'yaml.error:unsupported-float-value))
     (:keyword
      :NaN)
     (:best-effort
      #+sbcl *sbcl-nan-value*
11ee2909
      #+allegro #.excl:*nan-double*
      #-(or sbcl allegro) :NaN)))
 
 (defun positive-infinity ()
   (case *float-strategy*
     (:error
      (error 'yaml.error:unsupported-float-value))
     (:keyword
      :+Inf)
     (:best-effort
      #+sbcl sb-ext:double-float-positive-infinity
      #+allegro #.excl:*infinity-double*
      #-(or sbcl allegro) :+Inf)))
 
 (defun negative-infinity ()
   (case *float-strategy*
     (:error
      (error 'yaml.error:unsupported-float-value))
     (:keyword
      :-Inf)
     (:best-effort
      #+sbcl sb-ext:double-float-negative-infinity
      #+allegro #.excl:*negative-infinity-double*
      #-(or sbcl allegro) :-Inf)))