1#lang racket/base 2(require "config.rkt" 3 "error.rkt" 4 "whitespace.rkt" 5 "location.rkt" 6 "special.rkt" 7 "symbol-or-number.rkt") 8 9(provide read-fixnum 10 read-flonum) 11 12(define (read-fixnum read-one init-c in config) 13 (define c (read-char/skip-whitespace-and-comments init-c read-one in config)) 14 (define-values (line col pos) (port-next-location* in c)) 15 (define v (read-number-literal c in config "#e")) 16 (cond 17 [(fixnum? v) v] 18 [(eof-object? v) v] 19 [else 20 (reader-error in (reading-at config line col pos) 21 "expected a fixnum, found ~a" 22 v)])) 23 24(define (read-flonum read-one init-c in config) 25 (define c (read-char/skip-whitespace-and-comments init-c read-one in config)) 26 (define-values (line col pos) (port-next-location* in c)) 27 (define v (read-number-literal c in config "#i")) 28 (cond 29 [(flonum? v) v] 30 [(eof-object? v) v] 31 [else 32 (reader-error in (reading-at config line col pos) 33 "expected a flonum, found ~a" 34 v)])) 35 36;; ---------------------------------------- 37 38(define (read-number-literal c in config mode) 39 (cond 40 [(not (char? c)) c] 41 [else 42 (read-symbol-or-number c in config #:mode mode)])) 43