- ((digit-char-p ,char (max *read-base* 10))
- (if (digit-char-p ,char *read-base*)
- (if (= att +char-attr-constituent-expt+)
- +char-attr-constituent-digit-or-expt+
- +char-attr-constituent-digit+)
- +char-attr-constituent-decimal-digit+))
- ((= att +char-attr-invalid+)
- (%reader-error stream "invalid constituent"))
- (t att))))
+ ((< att +char-attr-constituent+) att)
+ (t (setf att (get-constituent-trait ,char))
+ (when possibly-rational
+ (setq possibly-rational
+ (or (digit-char-p ,char *read-base*)
+ (= att +char-attr-constituent-slash+))))
+ (when possibly-float
+ (setq possibly-float
+ (or (digit-char-p ,char 10)
+ (= att +char-attr-constituent-dot+))))
+ (cond
+ ((digit-char-p ,char (max *read-base* 10))
+ (if (digit-char-p ,char *read-base*)
+ (if (= att +char-attr-constituent-expt+)
+ +char-attr-constituent-digit-or-expt+
+ +char-attr-constituent-digit+)
+ +char-attr-constituent-decimal-digit+))
+ ((= att +char-attr-invalid+)
+ (%reader-error stream "invalid constituent"))
+ (t att))))))