Put char-set microcode table back in data structure. Edwin needs this.
authorChris Hanson <org/chris-hanson/cph>
Sun, 10 Feb 2019 00:20:33 +0000 (16:20 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sat, 16 Mar 2019 05:42:02 +0000 (22:42 -0700)
src/edwin/edwin.pkg
src/runtime/char-set.scm
src/runtime/runtime.pkg

index 1cf785ae411440406ed512c09307d93098531f63..01a52a7213264a24fdbcbb366170a9d91a3e560b 100644 (file)
@@ -154,7 +154,7 @@ USA.
   (files "string")
   (parent (edwin))
   (import (runtime character-set)
-         (char-set-table %char-set-table))
+         char-set-table)
   (export (edwin)
          (set-vector-8b-length! set-string-length!)
          (vector-8b-length string-length)
index 61b40fbe8ecdc994f6e2aa9524baf612d6ffd795..10398e25b532808cc5b4a8a2319266338eb86446 100644 (file)
@@ -39,11 +39,13 @@ USA.
 ;;; The HIGH range sequence is a u24 bytevector implementing an inversion list.
 
 (define-record-type <char-set>
-    (%make-char-set low high predicate)
+    (%make-char-set low high predicate table)
     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
@@ -55,8 +57,17 @@ USA.
                     (and (bitless-char? char)
                          (char-in-set? char char-set)))))
              (register-predicate! predicate 'char-set-predicate
-                                  '<= bitless-char?)
-             predicate)))))
+                                   '<= bitless-char?)
+             predicate))
+         (delay
+           (let ((table (make-bytevector #x100)))
+             (do ((cp 0 (fix:+ cp 1)))
+                 ((not (fix:< cp #x100)))
+               (bytevector-u8-set! table cp
+                                   (if (%code-point-in-char-set? cp char-set)
+                                       1
+                                       0)))
+             table)))))
     char-set))
 
 (define-integrable %low-cps-per-byte 8)
@@ -440,6 +451,9 @@ USA.
 (define (char-set-predicate char-set)
   (force (%char-set-predicate char-set)))
 
+(define (char-set-table char-set)
+  (force (%char-set-table char-set)))
+
 (define (char-set=? char-set . char-sets)
   (every (lambda (char-set*)
           (and (bytevector=? (%char-set-low char-set*)
@@ -637,14 +651,6 @@ USA.
       (error:bad-range-argument end 'ascii-range->char-set))
   (char-set (cons start end)))
 
-(define (%char-set-table char-set)
-  (let ((table (make-bytevector #x100)))
-    (do ((cp 0 (fix:+ cp 1)))
-       ((not (fix:< cp #x100)))
-      (bytevector-u8-set! table cp
-                         (if (%code-point-in-char-set? cp char-set) 1 0)))
-    table))
-
 (define (8-bit-char-set? char-set)
   (and (char-set? char-set)
        (let ((high (%char-set-high char-set)))
index 1e418b522f4914f02051cd83976aa1feb977fbfb..c6c058815b8365e1e8fe840cbeccdb8495917c85 100644 (file)
@@ -1483,9 +1483,7 @@ USA.
          re-compile-char-set
          string->char-set)
   (export (runtime regular-sexpression)
-         normalize-ranges)
-  (export (runtime legacy-string)
-         (char-set-table %char-set-table)))
+         normalize-ranges))
 
 (define-package (runtime compiler-info)
   (files "infstr" "infutl")