Fix a reader issue which prevented reading numbers.
Previous change to (fail) by default assumed (return) was called on success, which wasn't the case. This rectifies that omission.
This commit is contained in:
parent
3bd580d398
commit
66d3ff9d38
|
|
@ -208,7 +208,7 @@
|
|||
[(decimal-char? (char n)) (decimal n neg 0)]))
|
||||
(define (leading-zero n neg)
|
||||
(cond
|
||||
[(end? n) 0]
|
||||
[(end? n) (return 0)]
|
||||
[(eq? (char n) #\.) (fpnum (next n) neg 0.0)]
|
||||
[(memq (char n) '(#\E #\e)) (fpnum-exp (next n) neg 0.0)]
|
||||
[(memq (char n) '(#\X #\x)) (radix (next n) neg 16 0)]
|
||||
|
|
@ -216,13 +216,13 @@
|
|||
[(octal-char? (char n)) (radix n neg 8 0)]))
|
||||
(define (radix n neg rad accum)
|
||||
(cond
|
||||
[(end? n) (if neg (fix-neg accum) accum)]
|
||||
[(end? n) (return (if neg (fix-neg accum) accum))]
|
||||
[(hex-char? (char n)) (let ([int (digit->integer (char n))])
|
||||
(when (fix>= int rad) (fail))
|
||||
(radix (next n) neg rad (fix+ (fix* accum rad) int)))]))
|
||||
(define (decimal n neg accum)
|
||||
(cond
|
||||
[(end? n) (if neg (fix-neg accum) accum)]
|
||||
[(end? n) (return (if neg (fix-neg accum) accum))]
|
||||
[(eq? (char n) #\.) (fpnum (next n) neg (make-float accum))]
|
||||
[(memq (char n) '(#\E #\e)) (fpnum-exp (next n) neg (make-float accum))]
|
||||
[(decimal-char? (char n)) (let ([int (digit->integer (char n))])
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
(float/ 0.1 10.0)))]))
|
||||
(define (fpnum n neg accum [pv 0.1])
|
||||
(cond
|
||||
[(end? n) (if neg (float-neg accum) accum)]
|
||||
[(end? n) (return (if neg (float-neg accum) accum))]
|
||||
[(memq (char n) '(#\E #\e)) (fpnum-exp (next n) neg accum)]
|
||||
[(decimal-char? (char n)) (let ([int (digit->integer (char n))])
|
||||
(fpnum (next n) neg
|
||||
|
|
@ -257,9 +257,8 @@
|
|||
(fpnum-exp-digit* (next n) accum neg int))]))
|
||||
(define (fpnum-exp-digit* n accum neg expon)
|
||||
(cond
|
||||
[(end? n) ((if neg float/ float*)
|
||||
accum
|
||||
(pow 10.0 (make-float expon)))]
|
||||
[(end? n) (return ((if neg float/ float*)
|
||||
accum (pow 10.0 (make-float expon))))]
|
||||
[(decimal-char? (char n)) (let ([int (digit->integer (char n))])
|
||||
(fpnum-exp-digit* (next n) accum neg
|
||||
(fix+ (fix* expon 10) int)))]))
|
||||
|
|
|
|||
Loading…
Reference in New Issue