diff --git a/collects/r6rs/private/readtable.ss b/collects/r6rs/private/readtable.ss index a8a518b1cd..b7334f3d9c 100644 --- a/collects/r6rs/private/readtable.ss +++ b/collects/r6rs/private/readtable.ss @@ -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)]) diff --git a/collects/rnrs/base-6.ss b/collects/rnrs/base-6.ss index 1ba57a14d3..0c7b240f08 100644 --- a/collects/rnrs/base-6.ss +++ b/collects/rnrs/base-6.ss @@ -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=?