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)])) [(decimal-char? (char n)) (decimal n neg 0)]))
(define (leading-zero n neg) (define (leading-zero n neg)
(cond (cond
[(end? n) 0] [(end? n) (return 0)]
[(eq? (char n) #\.) (fpnum (next n) neg 0.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) '(#\E #\e)) (fpnum-exp (next n) neg 0.0)]
[(memq (char n) '(#\X #\x)) (radix (next n) neg 16 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)])) [(octal-char? (char n)) (radix n neg 8 0)]))
(define (radix n neg rad accum) (define (radix n neg rad accum)
(cond (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))]) [(hex-char? (char n)) (let ([int (digit->integer (char n))])
(when (fix>= int rad) (fail)) (when (fix>= int rad) (fail))
(radix (next n) neg rad (fix+ (fix* accum rad) int)))])) (radix (next n) neg rad (fix+ (fix* accum rad) int)))]))
(define (decimal n neg accum) (define (decimal n neg accum)
(cond (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))] [(eq? (char n) #\.) (fpnum (next n) neg (make-float accum))]
[(memq (char n) '(#\E #\e)) (fpnum-exp (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))]) [(decimal-char? (char n)) (let ([int (digit->integer (char n))])
@ -237,7 +237,7 @@
(float/ 0.1 10.0)))])) (float/ 0.1 10.0)))]))
(define (fpnum n neg accum [pv 0.1]) (define (fpnum n neg accum [pv 0.1])
(cond (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)] [(memq (char n) '(#\E #\e)) (fpnum-exp (next n) neg accum)]
[(decimal-char? (char n)) (let ([int (digit->integer (char n))]) [(decimal-char? (char n)) (let ([int (digit->integer (char n))])
(fpnum (next n) neg (fpnum (next n) neg
@ -257,9 +257,8 @@
(fpnum-exp-digit* (next n) accum neg int))])) (fpnum-exp-digit* (next n) accum neg int))]))
(define (fpnum-exp-digit* n accum neg expon) (define (fpnum-exp-digit* n accum neg expon)
(cond (cond
[(end? n) ((if neg float/ float*) [(end? n) (return ((if neg float/ float*)
accum accum (pow 10.0 (make-float expon))))]
(pow 10.0 (make-float expon)))]
[(decimal-char? (char n)) (let ([int (digit->integer (char n))]) [(decimal-char? (char n)) (let ([int (digit->integer (char n))])
(fpnum-exp-digit* (next n) accum neg (fpnum-exp-digit* (next n) accum neg
(fix+ (fix* expon 10) int)))])) (fix+ (fix* expon 10) int)))]))