(defvar *ouch-ptr*)
(declaim (type index *read-buffer-length* *inch-ptr* *ouch-ptr*))
-(declaim (simple-string *read-buffer*))
+(declaim (type (simple-array character (*)) *read-buffer*))
(defmacro reset-read-buffer ()
;; Turn *READ-BUFFER* into an empty read buffer.
(colons 0)
(possibly-rational t)
(possibly-float t)
- (escapes ()))
+ (escapes ())
+ (seen-multiple-escapes nil))
(reset-read-buffer)
(prog ((char firstchar))
(case (char-class3 char attribute-table)
(#.+char-attr-package-delimiter+ (go COLON))
(t (go SYMBOL)))
MULT-ESCAPE
+ (setq seen-multiple-escapes t)
(do ((char (read-char stream t) (read-char stream t)))
((multiple-escape-p char))
(if (escapep char) (setq char (read-char stream t)))
;; a FIND-PACKAGE* function analogous to INTERN*
;; and friends?
(read-buffer-to-string)
- *keyword-package*))
+ (if seen-multiple-escapes
+ (read-buffer-to-string)
+ *keyword-package*)))
(reset-read-buffer)
(setq escapes ())
(setq char (read-char stream nil nil))
;; while attempting to constant-fold. Maybe some sort
;; of load-time-form magic could be used instead?
(case float-format
- (short-float
- (values
- (log sb!xc:least-positive-normalized-short-float 10s0)
- (log sb!xc:most-positive-short-float 10s0)))
- (single-float
+ ((short-float single-float)
(values
(log sb!xc:least-positive-normalized-single-float 10f0)
(log sb!xc:most-positive-single-float 10f0)))
- (double-float
+ ((double-float #!-long-float long-float)
(values
(log sb!xc:least-positive-normalized-double-float 10d0)
(log sb!xc:most-positive-double-float 10d0)))
+ #!+long-float
(long-float
(values
- (log sb!xc:least-positive-normalized-long-float 10L0)
- (log sb!xc:most-positive-long-float 10L0))))
+ (log sb!xc:least-positive-normalized-long-float 10l0)
+ (log sb!xc:most-positive-long-float 10l0))))
(let ((correction (cond ((<= exponent min-expo)
(ceiling (- min-expo exponent)))
((>= exponent max-expo)