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:
Jesse D. McDonald 2012-07-14 14:55:17 -05:00
parent 3bd580d398
commit 66d3ff9d38
1 changed files with 6 additions and 7 deletions

View File

@ -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)))]))