r6rs reader: delay number & symbol regexp construction
svn: r14392
This commit is contained in:
parent
0db0fefba5
commit
682d76d577
|
@ -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)])
|
||||
|
|
|
@ -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=?
|
||||
|
|
Loading…
Reference in New Issue
Block a user