Eliminate potentially-problematic use of delay for char-set-predicate.
authorChris Hanson <org/chris-hanson/cph>
Sun, 10 Feb 2019 22:04:07 +0000 (14:04 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sun, 10 Feb 2019 22:04:07 +0000 (14:04 -0800)
src/runtime/char-set.scm

index bed378e3a20596e61e119dbd166de495f12950a7..6ddc12f84f9a0cc1d2b1c71bfbdeee4275971cb1 100644 (file)
@@ -43,21 +43,18 @@ USA.
     char-set?
   (low %char-set-low)
   (high %char-set-high)
-  (predicate %char-set-predicate)
+  (predicate char-set-predicate)
   ;; backwards compatibility for Edwin:
   (table %char-set-table))
 
 (define (make-char-set low high)
-  (letrec
-      ((char-set
-       (%make-char-set low high
-         (delay
-           (let ((predicate
-                  (lambda (char)
-                    (and (char? char)
-                         (char-in-set? char char-set)))))
-             (register-predicate! predicate 'char-set-predicate '<= char?)
-             predicate))
+  (letrec*
+      ((predicate
+       (lambda (char)
+         (and (char? char)
+              (char-in-set? char char-set))))
+       (char-set
+       (%make-char-set low high predicate
          (delay
            (let ((table (make-bytevector #x100)))
              (do ((cp 0 (fix:+ cp 1)))
@@ -67,6 +64,7 @@ USA.
                                        1
                                        0)))
              table)))))
+    (register-predicate! predicate 'char-set-predicate '<= char?)
     char-set))
 
 (define-integrable %low-cps-per-byte 8)
@@ -446,9 +444,6 @@ USA.
                      (else #t)))
              #f)))))
 
-(define (char-set-predicate char-set)
-  (force (%char-set-predicate char-set)))
-
 (define (char-set-table char-set)
   (force (%char-set-table char-set)))