anchor.diff:    ;; We can be reasonably sure that nothing but well-formed (both in
     ;; JSON and Lisp sense) number literals get to this point.
     (handler-case (read-from-string token)
  -    ((or reader-error #+ecl arithmetic-error #+allegro error) (err)
  +    ((or reader-error #+ecl arithmetic-error) (err)
         ;; Typically, this happens when the exponent is too large for
         ;; the number to be represented as a float -- a concealed (or,
         ;; exceptionally in ECL, manifest) FLOATING-POINT-OVERFLOW.  At
  
positive.code:                    (frac-part
                      (if f-marker
                          (subseq token (1+ f-marker) e-marker)
                          "0"))
                     (significand
                      (+ (read-from-string int-part)
                         (* (read-from-string frac-part)
  
negative.code:          do (funcall *string-char-handler* c)
           finally (return (funcall *end-of-string-handler*))))))
  
  ;;; handling numerical read errors in ACL
  #+allegro
  (defun allegro-read-numerical-overflow-p (condition)
    (and (typep condition 'simple-error)
         (search "is too large to be converted"
                 (slot-value condition 'excl::format-control))))
  
  #+allegro
  (deftype allegro-reader-numerical-overflow ()
    `(and error (satisfies allegro-read-numerical-overflow-p)))
  
  
  ;;; The default semantics
  
  