r6rs reader: delay number & symbol regexp construction

svn: r14392
This commit is contained in:
Matthew Flatt 2009-03-31 21:25:20 +00:00
parent 0db0fefba5
commit 682d76d577
2 changed files with 7 additions and 5 deletions

View File

@ -3,6 +3,7 @@
;; Readtable-based R6RS reading
(require syntax/readerr
scheme/promise
(for-syntax scheme/base))
(provide with-r6rs-reader-parameters
@ -436,8 +437,8 @@
(num 8)
(num 2)))
(values (pregexp (string-append "^" identifier "$"))
(pregexp (string-append "^" number "$")))))
(values (delay (pregexp (string-append "^" identifier "$")))
(delay (pregexp (string-append "^" number "$"))))))
(define (do-read-symbol-or-number num? prefix port src line col pos)
;; Read a delimited sequence (using an extended notion of delimiter),
@ -453,7 +454,7 @@
[(regexp-match? #rx"^[a-zA-Z!$%&*/:<=>?^_~][a-zA-Z0-9+!$%&*/:<=>?^_~.@-]*$" thing)
;; Simple symbol:
(string->symbol thing)]
[(regexp-match? rx:number thing)
[(regexp-match? (force rx:number) thing)
(let ([n (string->number
;; MzScheme doesn't handle mantissa widths, yet, so strip them out:
(regexp-replace* #rx"[|][0-9]+" thing ""))])
@ -461,7 +462,7 @@
(error 'r6rs-parser "number didn't convert: ~e" thing))
n)]
[(and (not num?)
(regexp-match? rx:id thing))
(regexp-match? (force rx:id) thing))
(string->symbol
(bytes->string/utf-8
(let loop ([t (string->bytes/utf-8 thing)])

View File

@ -3,6 +3,7 @@
(require (for-syntax (rename-in r6rs/private/base-for-syntax
[syntax-rules r6rs:syntax-rules])
scheme/base)
scheme/promise
scheme/splicing
r6rs/private/qq-gen
r6rs/private/exns
@ -346,7 +347,7 @@
[s (if (regexp-match? #rx"#[dDxXoObB]" s)
s
(string-append prefix s))])
(and (regexp-match? rx:number s)
(and (regexp-match? (force rx:number) s)
(string->number (regexp-replace* #rx"[|][0-9]+" s "")))))
(define r6rs:symbol=?