source: branches/working-0711/ccl/level-1/l1-aprims.lisp @ 7944

Last change on this file since 7944 was 7944, checked in by gb, 13 years ago

Process-whostate is now the per-thread binding of *WHOSTATE*.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 93.4 KB
Line 
1;;;-*-Mode: LISP; Package: CCL -*-
2;;;
3;;;   Copyright (C) 1994-2001 Digitool, Inc
4;;;   This file is part of OpenMCL. 
5;;;
6;;;   OpenMCL is licensed under the terms of the Lisp Lesser GNU Public
7;;;   License , known as the LLGPL and distributed with OpenMCL as the
8;;;   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
9;;;   which is distributed with OpenMCL as the file "LGPL".  Where these
10;;;   conflict, the preamble takes precedence. 
11;;;
12;;;   OpenMCL is referenced in the preamble as the "LIBRARY."
13;;;
14;;;   The LLGPL is also available online at
15;;;   http://opensource.franz.com/preamble.html
16
17;; L1-aprims.lisp
18
19
20(in-package "CCL")
21
22
23(let* ((standard-initial-bindings ())
24       (standard-initial-bindings-lock (make-read-write-lock)))
25
26  (defun standard-initial-bindings ()
27    (with-read-lock (standard-initial-bindings-lock)
28      (copy-list standard-initial-bindings)))
29
30  (defun define-standard-initial-binding (symbol initform)
31    (setq symbol (require-type symbol 'symbol))
32    (%proclaim-special symbol)
33    (unless (boundp symbol)
34      (set symbol (funcall initform)))
35    (with-write-lock (standard-initial-bindings-lock)
36      (let* ((pair (assoc symbol standard-initial-bindings)))
37        (if pair
38          (setf (cdr pair) initform)
39          (push (cons symbol initform) standard-initial-bindings))))
40    (record-source-file symbol 'variable)
41    symbol))
42
43(def-standard-initial-binding *package*)
44(def-standard-initial-binding *gensym-counter* 0)
45(def-standard-initial-binding *random-state* (initialize-random-state #xFBF1 9))
46#+lock-accounting
47(progn
48(def-standard-initial-binding *locks-held* ())
49(def-standard-initial-binding *locks-pending* ())
50(def-standard-initial-binding *lock-conses* (make-list 20)))
51(def-standard-initial-binding *whostate* "Reset")
52(setq *whostate* "Active")
53
54(defun %badarg (arg type)
55  (%err-disp $XWRONGTYPE arg type))
56
57(defun atom (arg)
58  "Return true if OBJECT is an ATOM, and NIL otherwise."
59  (not (consp arg)))
60
61(defun list (&rest args)
62  "Return constructs and returns a list of its arguments."
63  args)
64
65(%fhave '%temp-list #'list)
66
67(defun list* (arg &rest others)
68  "Return a list of the arguments with last cons a dotted pair"
69  (cond ((null others) arg)
70        ((null (cdr others)) (cons arg (car others)))
71        (t (do ((x others (cdr x)))
72               ((null (cddr x)) (rplacd x (cadr x))))
73           (cons arg others))))
74
75
76
77(defun funcall (fn &rest args)
78  "Call FUNCTION with the given ARGUMENTS."
79  (declare (dynamic-extent args))
80  (apply fn args))
81
82
83(defun apply (function arg &rest args)
84  "Apply FUNCTION to a list of arguments produced by evaluating ARGUMENTS in
85   the manner of LIST*. That is, a list is made of the values of all but the
86   last argument, appended to the value of the last argument, which must be a
87   list."
88  (declare (dynamic-extent args))
89  (cond ((null args)
90         (apply function arg))
91        ((null (cdr args))
92         (apply function arg (car args)))
93        (t (do* ((a1 args a2)
94                 (a2 (cdr args) (cdr a2)))
95                ((atom (cdr a2))
96                 (rplacd a1 (car a2))
97                 (apply function arg args))))))
98
99
100;;; This is not fast, but it gets the functionality that
101;;; Wood and possibly other code depend on.
102(defun applyv (function arg &rest other-args)
103  (declare (dynamic-extent other-args))
104  (let* ((other-args (cons arg other-args))
105         (last-arg (car (last other-args)))
106         (last-arg-length (length last-arg))
107         (butlast-args (nbutlast other-args))
108         (rest-args (make-list last-arg-length))
109         (rest-args-tail rest-args))
110    (declare (dynamic-extent other-args rest-args))
111    (dotimes (i last-arg-length)
112      (setf (car rest-args-tail) (aref last-arg i))
113      (pop rest-args-tail))
114    (apply function (nconc butlast-args rest-args))))
115
116;;; This is slow, and since %apply-lexpr isn't documented either,
117;;; nothing in the world should depend on it.  This is just being
118;;; anal retentive.  VERY anal retentive.
119
120(defun %apply-lexpr (function arg &rest args)
121  (cond ((null args) (%apply-lexpr function arg))
122        (t (apply function arg (nconc (nbutlast args)
123                                      (collect-lexpr-args (car (last args)) 0))))))
124
125
126(defun values-list (arg)
127  "Return all of the elements of LIST, in order, as values."
128  (apply #'values arg))
129
130
131
132
133
134
135; copy-list
136
137(defun copy-list (list)
138  "Return a new list which is EQUAL to LIST."
139  (if list
140    (let ((result (cons (car list) '()) ))
141      (do ((x (cdr list) (cdr x))
142           (splice result
143                   (%cdr (%rplacd splice (cons (%car x) '() ))) ))
144          ((atom x) (unless (null x)
145                      (%rplacd splice x)) result)))))
146
147(defun alt-list-length (l)
148  "Detect (and complain about) cirucular lists; allow any atom to
149terminate the list"
150  (do* ((n 0 (1+ n))
151        (fast l)
152        (slow l))
153       ((atom fast) n)
154    (declare (fixnum n))
155    (setq fast (cdr fast))
156    (if (logbitp 0 n)
157      (if (eq (setq slow (cdr slow)) fast)
158        (%err-disp $XIMPROPERLIST l)))))
159
160
161(defun last (list &optional (n 1))
162  "Return the last N conses (not the last element!) of a list."
163  (if (and (typep n 'fixnum)
164           (>= (the fixnum n) 0))
165    (locally (declare (fixnum n))
166      (do* ((checked-list list (cdr checked-list))
167            (returned-list list)
168            (index 0 (1+ index)))
169           ((atom checked-list) returned-list)
170        (declare (type index index))
171        (if (>= index n)
172          (pop returned-list))))
173    (if (and (typep n 'bignum)
174             (> n 0))
175      (require-type list 'list)
176      (report-bad-arg  n 'unsigned-byte))))
177
178
179
180
181
182(defun nthcdr (index list)
183  "Performs the cdr function n times on a list."
184  (setq list (require-type list 'list))
185  (if (and (typep index 'fixnum)
186           (>= (the fixnum index) 0))
187      (locally (declare (fixnum index))
188        (dotimes (i index list)
189          (when (null (setq list (cdr list))) (return))))
190      (progn
191        (unless (typep index 'unsigned-byte)
192          (report-bad-arg index 'unsigned-byte))
193        (do* ((n index (- n most-positive-fixnum)))
194             ((typep n 'fixnum) (nthcdr n list))
195          (unless (setq list (nthcdr most-positive-fixnum list))
196            (return))))))
197
198
199(defun nth (index list)
200  "Return the nth object in a list where the car is the zero-th element."
201  (car (nthcdr index list)))
202
203
204(defun nconc (&rest lists)
205  (declare (dynamic-extent lists))
206  "Concatenates the lists given as arguments (by changing them)"
207  (do* ((top lists (cdr top)))
208       ((null top) nil)
209    (let* ((top-of-top (car top)))
210      (cond
211       ((consp top-of-top)
212        (let* ((result top-of-top)
213               (splice result))
214          (do* ((elements (cdr top) (cdr elements)))
215                 ((endp elements))
216            (let ((ele (car elements)))
217              (typecase ele
218                (cons (rplacd (last splice) ele)
219                      (setf splice ele))
220                (null (rplacd (last splice) nil))
221                (atom (if (cdr elements)
222                        (report-bad-arg ele 'list)
223                        (rplacd (last splice) ele)))
224                (t (report-bad-arg ele 'list)))))
225          (return result)))
226       ((null top-of-top) nil)
227       (t
228        (if (cdr top)
229          (report-bad-arg top-of-top 'list)
230          (return top-of-top)))))))
231
232
233(defvar %setf-function-names% (make-hash-table :weak t :test 'eq))
234(defvar %setf-function-name-inverses% (make-hash-table :weak t :test 'eq))
235
236(defun setf-function-name (sym)
237   (or (gethash sym %setf-function-names%)
238       (progn
239         (let* ((setf-package-sym (construct-setf-function-name sym)))
240           (setf (gethash setf-package-sym %setf-function-name-inverses%) sym
241                 (gethash sym %setf-function-names%) setf-package-sym)))))
242
243
244(defun maybe-setf-name (sym)
245  (let* ((other (gethash sym %setf-function-name-inverses%)))
246    (if other
247      `(setf ,other)
248      sym)))
249
250                     
251
252(defconstant *setf-package* (or (find-package "SETF") (make-package "SETF" :use nil :external-size 1)))
253
254(defun construct-setf-function-name (sym)
255  (let ((pkg (symbol-package sym)))
256    (setq sym (symbol-name sym))
257    (if (null pkg)
258      (gentemp sym *setf-package*)
259      (values
260       (intern
261        ;;I wonder, if we didn't check, would anybody report it as a bug?
262        (if (not (%str-member #\: (setq pkg (package-name pkg))))
263          (%str-cat pkg "::" sym)
264          (%str-cat (prin1-to-string pkg) "::" (princ-to-string sym)))
265        *setf-package*)))))
266
267(defun setf-function-name-p (name)
268  (and (consp name)
269             (consp (%cdr name))
270             (null (%cddr name))
271             (symbolp (%cadr name))
272             (eq (car name) 'setf)))
273
274(defun valid-function-name-p (name)
275  (if (symbolp name)                    ; Nil is a valid function name.  I guess.
276    (values t name)
277    (if (setf-function-name-p name)
278      (values t (setf-function-name (%cadr name)))
279      ; What other kinds of function names do we care to support ?
280      (values nil nil))))
281
282;;; Why isn't this somewhere else ?
283(defun ensure-valid-function-name (name)
284  (multiple-value-bind (valid-p nm) (valid-function-name-p name)
285    (if valid-p nm (error "Invalid function name ~s." name))))
286
287
288;;; Returns index if char appears in string, else nil.
289
290(defun %str-member (char string &optional start end)
291  (let* ((base-string-p (typep string 'simple-base-string)))
292    (unless base-string-p
293      (setq string (require-type string 'simple-string)))
294    (unless (characterp char)
295      (setq char (require-type char 'character)))
296    (do* ((i (or start 0) (1+ i))
297            (n (or end (uvsize string))))
298           ((= i n))
299        (declare (fixnum i n) (optimize (speed 3) (safety 0)))
300        (if (eq (schar (the simple-base-string string) i) char)
301          (return i)))))
302
303
304
305;;; Returns index of elt in vector, or nil if it's not there.
306(defun %vector-member (elt vector)
307  (unless (typep vector 'simple-vector)
308    (report-bad-arg vector 'simple-vector))
309  (dotimes (i (the fixnum (length vector)))
310    (when (eq elt (%svref vector i)) (return i))))
311
312(defun logical-pathname-p (thing) (istruct-typep thing 'logical-pathname))
313
314(progn
315;;; It's back ...
316(defun list-nreverse (list)
317  (nreconc list nil))
318
319;;; We probably want to make this smarter so that less boxing
320;;; (and bignum/double-float consing!) takes place.
321
322(defun vector-nreverse (v)
323  (let* ((len (length v))
324         (middle (ash (the fixnum len) -1)))
325    (declare (fixnum middle len))
326    (do* ((left 0 (1+ left))
327          (right (1- len) (1- right)))
328         ((= left middle) v)
329      (declare (fixnum left right))
330      (rotatef (aref v left) (aref v right)))))
331   
332(defun nreverse (seq)
333  "Return a sequence of the same elements in reverse order; the argument
334   is destroyed."
335  (when seq
336    (seq-dispatch seq
337                  (list-nreverse seq)
338                  (vector-nreverse seq)))))
339
340(defun nreconc (x y)
341  "Return (NCONC (NREVERSE X) Y)."
342  (do ((1st (cdr x) (if (endp 1st) 1st (cdr 1st)))
343       (2nd x 1st)              ;2nd follows first down the list.
344       (3rd y 2nd))             ;3rd follows 2nd down the list.
345      ((atom 2nd) 3rd)
346    (rplacd 2nd 3rd)))
347
348;;; The two-arg case is maybe a bit faster.  We -don't- want to
349;;; do the two-arg case repeatedly to implement the N-arg case.
350(defun append (&rest lists)
351  (declare (dynamic-extent lists))
352  "Construct a new list by concatenating the list arguments"
353  (if lists
354    (let* ((head (cons nil nil))
355           (tail head))
356      (declare (dynamic-extent head)
357               (cons head tail))
358      (do* ()
359           ((null lists) (cdr head))
360        (let* ((list (pop lists)))
361          (if (null lists)
362            (rplacd tail list)
363            (dolist (element list)
364                (setq tail (cdr (rplacd tail (cons element nil)))))))))))
365
366
367
368                     
369
370
371
372
373
374
375
376(progn
377(defun list-reverse (l)
378  (do* ((new ()))
379       ((null l) new)
380    (push (pop l) new)))
381
382; Again, it's worth putting more work into this when the dust settles.
383(defun vector-reverse (v)
384  (let* ((len (length v))
385         (new (make-array (the fixnum len) :element-type (array-element-type v))))   ; a LOT more work ...
386    (declare (fixnum len))
387    (do* ((left 0 (1+ left))
388          (right (1- len) (1- right)))
389         ((= left len) new)
390      (declare (fixnum left right))
391      (setf (uvref new left)
392            (aref v right)))))
393
394(defun reverse (seq)
395  "Return a new sequence containing the same elements but in reverse order."
396  (seq-dispatch seq (list-reverse seq) (vector-reverse seq)))
397)
398
399(defun check-sequence-bounds (seq start end)
400  (let* ((length (length seq)))
401    (declare (fixnum length))
402    (if (not end)
403      (setq end length)
404      (unless (typep end 'fixnum)
405        (report-bad-arg end 'fixnum)))
406    (unless (typep start 'fixnum)
407      (report-bad-arg start 'fixnum))
408    (locally (declare (fixnum start end))
409      (cond ((> end length)
410             (report-bad-arg end `(integer 0 (,length))))
411            ((< start 0)
412             (report-bad-arg start `(integer 0)))
413            ((< end 0)
414             (report-bad-arg end `(integer 0 (,length))))
415            ((> start end)
416             (report-bad-arg start `(integer 0 ,end)))
417            (t end)))))
418 
419
420(defun byte-length (string &optional  (start 0) end)
421  (setq end (check-sequence-bounds string start end))
422  (- end start))
423
424
425
426(defun make-cstring (string)
427  (let* ((len (length string)))
428    (declare (fixnum len))
429    (let* ((s (malloc (the fixnum (1+ len)))))
430      (setf (%get-byte s len) 0)
431      (multiple-value-bind (data offset) (array-data-and-offset string)
432        (dotimes (i len s)
433          (setf (%get-unsigned-byte s i) (%scharcode data (+ offset i))))
434        s))))
435
436
437(defun extended-string-p (thing)
438  (declare (ignore thing)))
439
440(defun simple-extended-string-p (thing)
441  (declare (ignore thing)))
442
443
444
445(defun move-string-bytes (source dest off1 off2 n)
446  (declare (fixnum off1 off2 n)
447           (simple-base-string source dest)
448           (optimize (speed 3) (safety 0)))
449  (dotimes (i n dest)
450    (setf (schar dest off2) (schar source off1))
451    (incf off1)
452    (incf off2)))
453
454
455(defun %str-cat (s1 s2 &rest more)
456  (declare (dynamic-extent more))
457  (require-type s1 'simple-string)
458  (require-type s2 'simple-string)
459  (let* ((len1 (length s1))
460         (len2 (length s2))
461         (len (%i+ len2 len1)))
462    (declare (optimize (speed 3)(safety 0)))
463    (dolist (s more)
464      (require-type s 'simple-string)
465      (setq len (+ len (length s))))
466    (let ((new-string (make-string len :element-type 'base-char)))
467      (move-string-bytes s1 new-string 0 0 len1)
468      (move-string-bytes s2 new-string 0 len1 len2)
469      (dolist (s more)
470        (setq len2 (%i+ len1 len2))
471        (move-string-bytes s new-string 0 len2 (setq len1 (length s))))
472      new-string)))
473
474
475(defun %substr (str start end)
476  (require-type start 'fixnum)
477  (require-type end 'fixnum)
478  (require-type str 'string)
479  (let ((len (length str)))
480    (multiple-value-bind (str strb)(array-data-and-offset str)
481      (let ((newlen (%i- end start)))
482        (when (%i> end len)(error "End ~S exceeds length ~S." end len))
483        (when (%i< start 0)(error "Negative start"))
484        (let ((new (make-string newlen)))
485          (do* ((i 0 (1+ i))
486                (pos (%i+ start strb) (1+ pos)))
487               ((= i newlen) new)
488            (declare (fixnum i pos))
489            (setf (schar new i) (schar str pos))))))))
490
491
492
493;;; 3 callers
494(defun %list-to-uvector (subtype list)   ; subtype may be nil (meaning simple-vector
495  (let* ((n (length list))
496         (new (%alloc-misc n (or subtype target::subtag-simple-vector))))  ; yech
497    (dotimes (i n)
498      (declare (fixnum i))
499      (uvset new i (%car list))
500      (setq list (%cdr list)))
501    new))
502
503
504; appears to be unused
505(defun upgraded-array-element-type (type &optional env)
506  "Return the element type that will actually be used to implement an array
507   with the specifier :ELEMENT-TYPE Spec."
508  (declare (ignore env))
509  (element-subtype-type (element-type-subtype type)))
510
511(defun upgraded-complex-part-type (type &optional env)
512  (declare (ignore env))
513  (declare (ignore type))               ; Ok, ok.  So (upgraded-complex-part-type 'bogus) is 'REAL. So ?
514  'real)
515
516
517#+ppc32-target
518(progn
519  (defparameter array-element-subtypes
520    #(single-float 
521      (unsigned-byte 32)
522      (signed-byte 32)
523      fixnum
524      base-char                         ;ucs4
525      (unsigned-byte 8)
526      (signed-byte 8)
527      base-char
528      (unsigned-byte 16)
529      (signed-byte 16)
530      double-float
531      bit))
532 
533  ;; given uvector subtype - what is the corresponding element-type
534  (defun element-subtype-type (subtype)
535    (declare (fixnum subtype))
536    (if  (= subtype ppc32::subtag-simple-vector) t
537        (svref array-element-subtypes 
538               (ash (- subtype ppc32::min-cl-ivector-subtag) (- ppc32::ntagbits)))))
539  )
540
541#+ppc64-target
542(progn
543
544(defparameter array-element-subtypes
545  #(bogus
546    bogus
547    bogus
548    bogus
549    (signed-byte 8)
550    (signed-byte 16)
551    (signed-byte 32)
552    (signed-byte 64)
553    (unsigned-byte 8)
554    (unsigned-byte 16)
555    (unsigned-byte 32)
556    (unsigned-byte 64)
557    bogus
558    bogus
559    single-float
560    fixnum
561    bogus
562    bogus
563    bogus
564    double-float
565    bogus
566    bogus
567    base-char
568    bogus
569    bogus
570    bogus
571    bogus
572    bogus
573    bogus
574    bit
575    bogus
576    bogus)) 
577
578 
579  ;;; given uvector subtype - what is the corresponding element-type
580  (defun element-subtype-type (subtype)
581    (declare (fixnum subtype))
582    (if  (= subtype ppc64::subtag-simple-vector)
583      t
584      (svref array-element-subtypes 
585             (ash (- subtype 128) -2))))
586  )
587
588#+x8664-target
589(progn
590
591  ;;; 1, 8, 16-bit element types
592  (defparameter *immheader-0-array-element-types*
593    #(bogus
594      bogus
595      bogus
596      bogus
597      bogus
598      bogus
599      bogus
600      bogus
601      bogus
602      bogus
603      (signed-byte 16)
604      (unsigned-byte 16)
605      base-char
606      (signed-byte 8)
607      (unsigned-byte 8)
608      bit))
609
610  ;;; 32-bit element types
611  (defparameter *immheader-1-array-element-types*
612    #(bogus
613      bogus
614      bogus
615      bogus
616      bogus
617      bogus
618      bogus
619      bogus
620      bogus
621      bogus
622      bogus
623      bogus
624      base-char
625      (signed-byte 32)
626      (unsigned-byte 32)
627      single-float))
628
629  ;;; 64-bit element types
630  (defparameter *immheader-2-array-element-types*
631    #(bogus
632      bogus
633      bogus
634      bogus
635      bogus
636      bogus
637      bogus
638      bogus
639      bogus
640      bogus
641      bogus
642      bogus
643      fixnum
644      (signed-byte 64)
645      (unsigned-byte 64)
646      double-float)) 
647     
648 
649  (defun element-subtype-type (subtype)
650    (declare (type (unsigned-byte 8) subtype))
651    (if (= subtype x8664::subtag-simple-vector)
652      t
653      (let* ((class (ash subtype (- x8664::ntagbits)))
654             (tag (logand subtype x8664::fulltagmask)))
655        (declare (type (unsigned-byte 4) class tag))
656        (cond ((= tag x8664::fulltag-immheader-0)
657               (%svref *immheader-0-array-element-types* class))
658              ((= tag x8664::fulltag-immheader-1)
659               (%svref *immheader-1-array-element-types* class))
660              ((= tag x8664::fulltag-immheader-2)
661               (%svref *immheader-2-array-element-types* class))
662              (t 'bogus)))))
663  )
664
665
666;;; %make-displaced-array assumes the following
667
668(eval-when (:compile-toplevel)
669  (assert (eql target::arrayH.flags-cell target::vectorH.flags-cell))
670  (assert (eql target::arrayH.displacement-cell target::vectorH.displacement-cell))
671  (assert (eql target::arrayH.data-vector-cell target::vectorH.data-vector-cell)))
672
673
674(defun %make-displaced-array (dimensions displaced-to
675                                         &optional fill adjustable
676                                         offset explicitp)
677  (if offset 
678    (unless (and (fixnump offset) (>= (the fixnum offset) 0))
679      (setq offset (require-type offset '(and fixnum (integer 0 *)))))
680    (setq offset 0))
681  (locally (declare (fixnum offset))
682    (let* ((disp-size (array-total-size displaced-to))
683           (rank (if (listp dimensions)(length dimensions) 1))
684           (new-size (if (fixnump dimensions)
685                       dimensions
686                       (if (listp dimensions)
687                         (if (eql rank 1)
688                           (car dimensions)
689                           (if (eql rank 0) 1 ; why not 0?
690                           (apply #'* dimensions))))))
691           (vect-subtype (typecode displaced-to))
692           (target displaced-to)
693           (real-offset offset)
694           (flags 0))
695      (declare (fixnum disp-size rank flags vect-subtype real-offset))
696      (when explicitp
697        (setq flags (bitset $arh_exp_disp_bit flags)))
698      (if (not (fixnump new-size))(error "Bad array dimensions ~s." dimensions)) 
699      (locally (declare (fixnum new-size))
700        ; (when (> (+ offset new-size) disp-size) ...), but don't cons bignums
701        (when (or (> new-size disp-size)
702                  (let ((max-offset (- disp-size new-size)))
703                    (declare (fixnum max-offset))
704                    (> offset max-offset)))
705          (%err-disp $err-disp-size displaced-to))
706        (if adjustable  (setq flags (bitset $arh_adjp_bit flags)))
707        (when fill
708          (if (eq fill t)
709            (setq fill new-size)
710            (unless (and (eql rank 1)
711                         (fixnump fill)
712                         (locally (declare (fixnum fill))
713                           (and (>= fill 0) (<= fill new-size))))
714              (error "Bad fill pointer ~s" fill)))
715          (setq flags (bitset $arh_fill_bit flags))))
716      ; If displaced-to is an array or vector header and is either
717      ; adjustable or its target is a header, then we need to set the
718      ; $arh_disp_bit. If displaced-to is not adjustable, then our
719      ; target can be its target instead of itself.
720      (when (or (eql vect-subtype target::subtag-arrayH)
721                (eql vect-subtype target::subtag-vectorH))
722        (let ((dflags (%svref displaced-to target::arrayH.flags-cell)))
723          (declare (fixnum dflags))
724          (when (or (logbitp $arh_adjp_bit dflags)
725                    t
726                    (progn
727                      #+nope
728                      (setq target (%svref displaced-to target::arrayH.data-vector-cell)
729                            real-offset (+ offset (%svref displaced-to target::arrayH.displacement-cell)))
730                      (logbitp $arh_disp_bit dflags)
731                      #-nope t))
732            (setq flags (bitset $arh_disp_bit flags))))
733        (setq vect-subtype (%array-header-subtype displaced-to)))
734      ; assumes flags is low byte
735      (setq flags (dpb vect-subtype target::arrayH.flags-cell-subtag-byte flags))
736      (if (eq rank 1)
737        (%gvector target::subtag-vectorH 
738                      (if (fixnump fill) fill new-size)
739                      new-size
740                      target
741                      real-offset
742                      flags)
743        (let ((val (%alloc-misc (+ target::arrayh.dim0-cell rank) target::subtag-arrayH)))
744          (setf (%svref val target::arrayH.rank-cell) rank)
745          (setf (%svref val target::arrayH.physsize-cell) new-size)
746          (setf (%svref val target::arrayH.data-vector-cell) target)
747          (setf (%svref val target::arrayH.displacement-cell) real-offset)
748          (setf (%svref val target::arrayH.flags-cell) flags)
749          (do* ((dims dimensions (cdr dims))
750                (i 0 (1+ i)))             
751               ((null dims))
752            (declare (fixnum i)(list dims))
753            (setf (%svref val (%i+ target::arrayH.dim0-cell i)) (car dims)))
754          val)))))
755
756(defun make-array (dims &key (element-type t element-type-p)
757                        displaced-to
758                        displaced-index-offset
759                        adjustable
760                        fill-pointer
761                        (initial-element nil initial-element-p)
762                        (initial-contents nil initial-contents-p))
763  (when (and initial-element-p initial-contents-p)
764        (error "Cannot specify both ~S and ~S" :initial-element-p :initial-contents-p))
765  (make-array-1 dims element-type element-type-p
766                displaced-to
767                displaced-index-offset
768                adjustable
769                fill-pointer
770                initial-element initial-element-p
771                initial-contents initial-contents-p
772                nil))
773
774
775
776
777
778(defun vector-pop (vector)
779  "Decrease the fill pointer by 1 and return the element pointed to by the
780  new fill pointer."
781  (let* ((fill (fill-pointer vector)))
782    (declare (fixnum fill))
783    (if (zerop fill)
784      (error "Fill pointer of ~S is 0 ." vector)
785      (progn
786        (decf fill)
787        (%set-fill-pointer vector fill)
788        (aref vector fill)))))
789
790
791
792
793(defun elt (sequence idx)
794  "Return the element of SEQUENCE specified by INDEX."
795  (seq-dispatch
796   sequence
797   (let* ((cell (nthcdr idx sequence)))
798     (if (consp cell)
799       (car (the cons cell))
800       (if cell
801         (report-bad-arg sequence '(satisfies proper-list-p))
802         (%err-disp $XACCESSNTH idx sequence))))
803       
804   (progn
805     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
806       (report-bad-arg idx 'unsigned-byte))
807     (locally 
808       (if (>= idx (length sequence))
809         (%err-disp $XACCESSNTH idx sequence)
810         (aref sequence idx))))))
811
812
813
814
815(defun set-elt (sequence idx value)
816  (seq-dispatch
817   sequence
818   (let* ((cell (nthcdr idx sequence)))
819     (if (consp cell)
820       (setf (car (the cons cell)) value)
821       (if cell
822         (report-bad-arg sequence '(satisfies proper-list-p))
823         (%err-disp $XACCESSNTH idx sequence))))
824   (progn
825     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
826       (report-bad-arg idx 'unsigned-byte))
827     (locally 
828       (declare (fixnum idx))
829       (if (>= idx (length sequence))
830         (%err-disp $XACCESSNTH idx sequence)
831         (setf (aref sequence idx) value))))))
832
833
834
835
836(%fhave 'equalp #'equal)                ; bootstrapping
837
838(defun copy-tree (tree)
839  "Recursively copy trees of conses."
840  (if (atom tree)
841    tree
842    (locally (declare (type cons tree))
843      (do* ((tail (cdr tree) (cdr tail))
844            (result (cons (copy-tree (car tree)) nil))
845            (ptr result (cdr ptr)))
846           ((atom tail)
847            (setf (cdr ptr) tail)
848            result)
849        (declare (type cons ptr result))
850        (locally 
851          (declare (type cons tail))
852          (setf (cdr ptr) (cons (copy-tree (car tail)) nil)))))))
853
854
855
856
857(defvar *periodic-task-interval* 0.3)
858(defvar *periodic-task-seconds* 0)
859(defvar *periodic-task-nanoseconds* 300000000)
860
861(defun set-periodic-task-interval (n)
862  (multiple-value-setq (*periodic-task-seconds* *periodic-task-nanoseconds*)
863    (nanoseconds n))
864  (setq *periodic-task-interval* n))
865
866(defun periodic-task-interval ()
867  *periodic-task-interval*)
868
869
870
871(defun char-downcase (c)
872  "Return CHAR converted to lower-case if that is possible."
873  (let* ((code (char-code c)))
874    (declare (type (mod #x110000) code))
875    (if (and (>= code (char-code #\A))(<= code (char-code #\Z)))
876      (%code-char (%i+ code #.(- (char-code #\a)(char-code #\A))))
877      (or (and (>= code #x80)
878               (%non-standard-lower-case-equivalent c))
879          c))))
880
881
882
883(defun digit-char-p (char &optional radix)
884  "If char is a digit in the specified radix, returns the fixnum for
885  which that digit stands, else returns NIL."
886  (let* ((code (char-code char))
887         (r (if radix (if (and (typep radix 'fixnum)
888                               (%i>= radix 2)
889                               (%i<= radix 36))
890                        radix
891                        (%validate-radix radix)) 10))
892         (weight (if (and (<= code (char-code #\9))
893                          (>= code (char-code #\0)))
894                   (the fixnum (- code (char-code #\0)))
895                   (if (and (<= code (char-code #\Z))
896                            (>= code (char-code #\A)))
897                     (the fixnum (+ 10 (the fixnum (- code (char-code #\A)))))
898                   (if (and (<= code (char-code #\z))
899                            (>= code (char-code #\a)))
900                     (the fixnum (+ 10 (the fixnum (- code (char-code #\a))))))))))
901    (declare (fixnum code r))
902    (and weight (< (the fixnum weight) r) weight)))
903
904
905
906
907
908(defun char-upcase (c)
909  "Return CHAR converted to upper-case if that is possible.  Don't convert
910   lowercase eszet (U+DF)."
911  (let* ((code (char-code c)))
912    (declare (type (mod #x110000) code))
913    (if (and (>= code (char-code #\a))(<= code (char-code #\z)))
914      (%code-char (%i- code #.(- (char-code #\a)(char-code #\A))))
915      (or (and (>= code #x80) (%non-standard-upper-case-equivalent c))
916          c))))
917
918
919
920(defun string-start-end (string start end)
921  (setq string (string string))
922  (let ((len (length (the string string))))
923    (flet ((are (a i)(error "Array index ~S out of bounds for ~S." i a)))   
924      (if (and end (> end len))(are string end))
925      (if (and start (or (< start 0)(> start len)))(are string start))
926      (setq start (or start 0) end (or end len))
927      (if (%i> start end)
928        (error "Start ~S exceeds end ~S." start end))
929      (if (typep string 'simple-string)
930        (values string start end)
931        (multiple-value-bind (str off)(array-data-and-offset string)
932          (values str (%i+ off start)(%i+ off end)))))))
933
934(defun get-properties (place indicator-list)
935  "Like GETF, except that INDICATOR-LIST is a list of indicators which will
936  be looked for in the property list stored in PLACE. Three values are
937  returned, see manual for details."
938  (do ((plist place (cddr plist)))
939      ((null plist) (values nil nil nil))
940    (cond ((atom (cdr plist))
941           (report-bad-arg place '(satisfies proper-list-p)))
942          ((memq (car plist) indicator-list) ;memq defined in kernel
943           (return (values (car plist) (cadr plist) plist))))))
944
945(defun string= (string1 string2 &key start1 end1 start2 end2)
946  "Given two strings (string1 and string2), and optional integers start1,
947  start2, end1 and end2, compares characters in string1 to characters in
948  string2 (using char=)."
949    (locally (declare (optimize (speed 3)(safety 0)))
950      (if (and (simple-string-p string1)(null start1)(null end1))
951        (setq start1 0 end1 (length string1))
952        (multiple-value-setq (string1 start1 end1)(string-start-end string1 start1 end1)))
953      (if (and (simple-string-p string2)(null start2)(null end2))
954        (setq start2 0 end2 (length string2))
955        (multiple-value-setq (string2 start2 end2)(string-start-end string2 start2 end2)))   
956      (%simple-string= string1 string2 start1 start2 end1 end2)))
957
958
959(defun lfun-keyvect (lfun)
960  (let ((bits (lfun-bits lfun)))
961    (declare (fixnum bits))
962    (and (logbitp $lfbits-keys-bit bits)
963         (or (logbitp $lfbits-method-bit bits)
964             (and (not (logbitp $lfbits-gfn-bit bits))
965                  (not (logbitp $lfbits-cm-bit bits))))
966         (nth-immediate lfun 1))))
967
968
969
970(defun function-lambda-expression (fn)
971  "Return (VALUES DEFINING-LAMBDA-EXPRESSION CLOSURE-P NAME), where
972  DEFINING-LAMBDA-EXPRESSION is NIL if unknown, or a suitable argument
973  to COMPILE otherwise, CLOSURE-P is non-NIL if the function's definition
974  might have been enclosed in some non-null lexical environment, and
975  NAME is some name (for debugging only) or NIL if there is no name."
976  ;(declare (values def env-p name))
977  (let* ((bits (lfun-bits (setq fn (require-type fn 'function)))))
978    (declare (fixnum bits))
979    (if (logbitp $lfbits-trampoline-bit bits)
980      (function-lambda-expression (nth-immediate fn 1))
981      (values (uncompile-function fn)
982              (logbitp $lfbits-nonnullenv-bit bits)
983              (function-name fn)))))
984
985; env must be a lexical-environment or NIL.
986; If env contains function or variable bindings or SPECIAL declarations, return t.
987; Else return nil
988(defun %non-empty-environment-p (env)
989  (loop
990    (when (or (null env) (istruct-typep env 'definition-environment))
991      (return nil))
992    (when (or (consp (lexenv.variables env))
993              (consp (lexenv.functions env))
994              (dolist (vdecl (lexenv.vdecls env))
995                (when (eq (cadr vdecl) 'special)
996                  (return t))))
997      (return t))
998    (setq env (lexenv.parent-env env))))
999
1000;(coerce object 'compiled-function)
1001(defun coerce-to-compiled-function (object)
1002  (setq object (coerce-to-function object))
1003  (unless (typep object 'compiled-function)
1004    (multiple-value-bind (def envp) (function-lambda-expression object)
1005      (when (or envp (null def))
1006        (%err-disp $xcoerce object 'compiled-function))
1007      (setq object (compile-user-function def nil))))
1008  object)
1009
1010
1011
1012(defun %set-toplevel (&optional (fun nil fun-p))
1013  ;(setq fun (require-type fun '(or symbol function)))
1014  (let* ((tcr (%current-tcr)))
1015    (prog1 (%tcr-toplevel-function tcr)
1016      (when fun-p
1017        (%set-tcr-toplevel-function tcr fun)))))
1018
1019
1020(defun gccounts ()
1021  (let* ((total (%get-gc-count))
1022         (full (full-gccount))
1023         (g2-count 0)
1024         (g1-count 0)
1025         (g0-count 0))
1026    (when (egc-enabled-p)
1027      (let* ((a (%active-dynamic-area)))
1028        (setq g0-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1029        (setq g1-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1030        (setq g2-count (%fixnum-ref a target::area.gc-count))))
1031    (values total full g2-count g1-count g0-count)))
1032
1033     
1034
1035
1036
1037(defstatic %pascal-functions%
1038    #(NIL NIL NIL NIL NIL NIL NIL NIL
1039      NIL NIL NIL NIL NIL NIL NIL NIL
1040      NIL NIL NIL NIL NIL NIL NIL NIL
1041      NIL NIL NIL NIL NIL NIL NIL NIL))
1042
1043
1044(defun gc-retain-pages (arg)
1045  "Try to influence the GC to retain/recycle the pages allocated between
1046GCs if arg is true, and to release them otherwise. This is generally a
1047gtradeoff between paging and other VM considerations."
1048  (setq *gc-event-status-bits*
1049        (if arg
1050          (bitset $gc-retain-pages-bit *gc-event-status-bits*)
1051          (bitclr $gc-retain-pages-bit *gc-event-status-bits*)))
1052  (not (null arg)))
1053
1054(defun gc-retaining-pages ()
1055  "Return T if the GC tries to retain pages between full GCs and NIL if
1056it's trying to release them to improve VM paging performance."
1057  (logbitp $gc-retain-pages-bit *gc-event-status-bits*)) 
1058
1059
1060(defun gc-verbose (on-full-gc &optional (egc-too on-full-gc))
1061  "If the first (required) argument is non-NIL, configures the GC to print
1062informational messages on entry and exit to each full GC; if the first argument
1063is NIL, suppresses those messages.  The second (optional) argument controls printing of messages on entry and exit to an ephemeral GC.  Returns values as per GC-VERBOSE-P."
1064  (let* ((bits *gc-event-status-bits*))
1065    (if on-full-gc
1066      (bitsetf $gc-verbose-bit bits)
1067      (bitclrf $gc-verbose-bit bits))
1068    (if egc-too
1069      (bitsetf $egc-verbose-bit bits)
1070      (bitclrf $egc-verbose-bit bits))
1071    (setq *gc-event-status-bits* bits)
1072    (values on-full-gc egc-too)))
1073
1074
1075(defun gc-verbose-p ()
1076  "Returns two values: the first is true if the GC is configured to
1077print messages on each full GC; the second is true if the GC is configured
1078to print messages on each ephemeral GC."
1079  (let* ((bits *gc-event-status-bits*))
1080    (values (logbitp $gc-verbose-bit bits)
1081            (logbitp $egc-verbose-bit bits))))
1082
1083(defun egc-active-p ()
1084  "Return T if the EGC was active at the time of the call, NIL otherwise.
1085Since this is generally a volatile piece of information, it's not clear
1086whether this function serves a useful purpose when native threads are
1087involved."
1088  (and (egc-enabled-p)
1089       (not (eql 0 (%get-kernel-global 'oldest-ephemeral)))))
1090
1091; this IS effectively a passive way of inquiring about enabled status.
1092(defun egc-enabled-p ()
1093  "Return T if the EGC was enabled at the time of the call, NIL otherwise."
1094  (not (eql 0 (%fixnum-ref (%active-dynamic-area) target::area.older))))
1095
1096(defun egc-configuration ()
1097  "Return as multiple values the sizes in kilobytes of the thresholds
1098associated with the youngest ephemeral generation, the middle ephemeral
1099generation, and the oldest ephemeral generation."
1100  (let* ((ta (%get-kernel-global 'tenured-area))
1101         (g2 (%fixnum-ref ta target::area.younger))
1102         (g1 (%fixnum-ref g2 target::area.younger))
1103         (g0 (%fixnum-ref g1 target::area.younger)))
1104    (values (ash (the fixnum (%fixnum-ref g0 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1105            (ash (the fixnum (%fixnum-ref g1 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1106            (ash (the fixnum (%fixnum-ref g2 target::area.threshold)) (- (- 10 target::fixnum-shift))))))
1107
1108
1109(defun configure-egc (e0size e1size e2size)
1110  "If the EGC is currently disabled, put the indicated threshold sizes in
1111effect and returns T, otherwise, returns NIL. (The provided threshold sizes
1112are rounded up to a multiple of 64Kbytes in OpenMCL 0.14 and to a multiple
1113of 32KBytes in earlier versions.)"
1114  (let* ((was-enabled (egc-active-p)))
1115    (unwind-protect
1116         (progn
1117           (egc nil)
1118           (setq e2size (logand (lognot #xffff) (+ #xffff (ash (require-type e2size '(unsigned-byte 18)) 10)))
1119                 e1size (logand (lognot #xffff) (+ #xffff (ash (require-type e1size '(unsigned-byte 18)) 10)))
1120                 e0size (logand (lognot #xffff) (+ #xffff (ash (require-type e0size '(integer 1 #.(ash 1 18))) 10))))
1121           (%configure-egc e0size e1size e2size))
1122      (egc was-enabled))))
1123
1124
1125
1126(defun macptr-flags (macptr)
1127  (if (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1128    0
1129    (uvref macptr TARGET::XMACPTR.FLAGS-CELL)))
1130
1131
1132; This doesn't really make the macptr be gcable (now has to be
1133; on linked list), but we might have other reasons for setting
1134; other flag bits.
1135(defun set-macptr-flags (macptr value) 
1136  (unless (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1137    (setf (%svref macptr TARGET::XMACPTR.FLAGS-CELL) value)
1138    value))
1139
1140(defun %new-gcable-ptr (size &optional clear-p)
1141  (let ((p (make-gcable-macptr $flags_DisposPtr)))
1142    (%setf-macptr p (malloc size))
1143    (if clear-p
1144      (#_bzero p size))
1145    p))
1146
1147(defun %gcable-ptr-p (p)
1148  (and (typep p 'macptr)
1149       (= (uvsize p) target::xmacptr.element-count)))
1150
1151(defstatic *non-standard-lower-to-upper* (make-hash-table :test #'eq)
1152  "Maps non-STANDARD-CHAR lowercase chars to uppercase equivalents")
1153
1154(defstatic *non-standard-upper-to-lower* (make-hash-table :test #'eq)
1155  "Maps non-STANDARD-CHAR uppercase chars to lowercase equivalents")
1156
1157;;; This alist is automatically (and not to cleverly ...) generated.
1158;;; The (upper . lower) pairs have the property that UPPER is the
1159;;; value "simple uppercase equivalent" entry for LOWER in the
1160;;; UnicodeData.txt file and LOWER is the corresponding entry for
1161;;; UPPER.
1162(dolist (pair '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
1163                (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
1164                (#\Latin_Capital_Letter_A_With_Circumflex
1165                 . #\Latin_Small_Letter_A_With_Circumflex)
1166                (#\Latin_Capital_Letter_A_With_Tilde . #\Latin_Small_Letter_A_With_Tilde)
1167                (#\Latin_Capital_Letter_A_With_Diaeresis
1168                 . #\Latin_Small_Letter_A_With_Diaeresis)
1169                (#\Latin_Capital_Letter_A_With_Ring_Above
1170                 . #\Latin_Small_Letter_A_With_Ring_Above)
1171                (#\Latin_Capital_Letter_Ae . #\Latin_Small_Letter_Ae)
1172                (#\Latin_Capital_Letter_C_With_Cedilla . #\Latin_Small_Letter_C_With_Cedilla)
1173                (#\Latin_Capital_Letter_E_With_Grave . #\Latin_Small_Letter_E_With_Grave)
1174                (#\Latin_Capital_Letter_E_With_Acute . #\Latin_Small_Letter_E_With_Acute)
1175                (#\Latin_Capital_Letter_E_With_Circumflex
1176                 . #\Latin_Small_Letter_E_With_Circumflex)
1177                (#\Latin_Capital_Letter_E_With_Diaeresis
1178                 . #\Latin_Small_Letter_E_With_Diaeresis)
1179                (#\Latin_Capital_Letter_I_With_Grave . #\Latin_Small_Letter_I_With_Grave)
1180                (#\Latin_Capital_Letter_I_With_Acute . #\Latin_Small_Letter_I_With_Acute)
1181                (#\Latin_Capital_Letter_I_With_Circumflex
1182                 . #\Latin_Small_Letter_I_With_Circumflex)
1183                (#\Latin_Capital_Letter_I_With_Diaeresis
1184                 . #\Latin_Small_Letter_I_With_Diaeresis)
1185                (#\Latin_Capital_Letter_Eth . #\Latin_Small_Letter_Eth)
1186                (#\Latin_Capital_Letter_N_With_Tilde . #\Latin_Small_Letter_N_With_Tilde)
1187                (#\Latin_Capital_Letter_O_With_Grave . #\Latin_Small_Letter_O_With_Grave)
1188                (#\Latin_Capital_Letter_O_With_Acute . #\Latin_Small_Letter_O_With_Acute)
1189                (#\Latin_Capital_Letter_O_With_Circumflex
1190                 . #\Latin_Small_Letter_O_With_Circumflex)
1191                (#\Latin_Capital_Letter_O_With_Tilde . #\Latin_Small_Letter_O_With_Tilde)
1192                (#\Latin_Capital_Letter_O_With_Diaeresis
1193                 . #\Latin_Small_Letter_O_With_Diaeresis)
1194                (#\Latin_Capital_Letter_O_With_Stroke . #\Latin_Small_Letter_O_With_Stroke)
1195                (#\Latin_Capital_Letter_U_With_Grave . #\Latin_Small_Letter_U_With_Grave)
1196                (#\Latin_Capital_Letter_U_With_Acute . #\Latin_Small_Letter_U_With_Acute)
1197                (#\Latin_Capital_Letter_U_With_Circumflex
1198                 . #\Latin_Small_Letter_U_With_Circumflex)
1199                (#\Latin_Capital_Letter_U_With_Diaeresis
1200                 . #\Latin_Small_Letter_U_With_Diaeresis)
1201                (#\Latin_Capital_Letter_Y_With_Acute . #\Latin_Small_Letter_Y_With_Acute)
1202                (#\Latin_Capital_Letter_Thorn . #\Latin_Small_Letter_Thorn)
1203                (#\Latin_Capital_Letter_A_With_Macron . #\Latin_Small_Letter_A_With_Macron)
1204                (#\Latin_Capital_Letter_A_With_Breve . #\Latin_Small_Letter_A_With_Breve)
1205                (#\Latin_Capital_Letter_A_With_Ogonek . #\Latin_Small_Letter_A_With_Ogonek)
1206                (#\Latin_Capital_Letter_C_With_Acute . #\Latin_Small_Letter_C_With_Acute)
1207                (#\Latin_Capital_Letter_C_With_Circumflex
1208                 . #\Latin_Small_Letter_C_With_Circumflex)
1209                (#\Latin_Capital_Letter_C_With_Dot_Above
1210                 . #\Latin_Small_Letter_C_With_Dot_Above)
1211                (#\Latin_Capital_Letter_C_With_Caron . #\Latin_Small_Letter_C_With_Caron)
1212                (#\Latin_Capital_Letter_D_With_Caron . #\Latin_Small_Letter_D_With_Caron)
1213                (#\Latin_Capital_Letter_D_With_Stroke . #\Latin_Small_Letter_D_With_Stroke)
1214                (#\Latin_Capital_Letter_E_With_Macron . #\Latin_Small_Letter_E_With_Macron)
1215                (#\Latin_Capital_Letter_E_With_Breve . #\Latin_Small_Letter_E_With_Breve)
1216                (#\Latin_Capital_Letter_E_With_Dot_Above
1217                 . #\Latin_Small_Letter_E_With_Dot_Above)
1218                (#\Latin_Capital_Letter_E_With_Ogonek . #\Latin_Small_Letter_E_With_Ogonek)
1219                (#\Latin_Capital_Letter_E_With_Caron . #\Latin_Small_Letter_E_With_Caron)
1220                (#\Latin_Capital_Letter_G_With_Circumflex
1221                 . #\Latin_Small_Letter_G_With_Circumflex)
1222                (#\Latin_Capital_Letter_G_With_Breve . #\Latin_Small_Letter_G_With_Breve)
1223                (#\Latin_Capital_Letter_G_With_Dot_Above
1224                 . #\Latin_Small_Letter_G_With_Dot_Above)
1225                (#\Latin_Capital_Letter_G_With_Cedilla . #\Latin_Small_Letter_G_With_Cedilla)
1226                (#\Latin_Capital_Letter_H_With_Circumflex
1227                 . #\Latin_Small_Letter_H_With_Circumflex)
1228                (#\Latin_Capital_Letter_H_With_Stroke . #\Latin_Small_Letter_H_With_Stroke)
1229                (#\Latin_Capital_Letter_I_With_Tilde . #\Latin_Small_Letter_I_With_Tilde)
1230                (#\Latin_Capital_Letter_I_With_Macron . #\Latin_Small_Letter_I_With_Macron)
1231                (#\Latin_Capital_Letter_I_With_Breve . #\Latin_Small_Letter_I_With_Breve)
1232                (#\Latin_Capital_Letter_I_With_Ogonek . #\Latin_Small_Letter_I_With_Ogonek)
1233                (#\Latin_Capital_Ligature_Ij . #\Latin_Small_Ligature_Ij)
1234                (#\Latin_Capital_Letter_J_With_Circumflex
1235                 . #\Latin_Small_Letter_J_With_Circumflex)
1236                (#\Latin_Capital_Letter_K_With_Cedilla . #\Latin_Small_Letter_K_With_Cedilla)
1237                (#\Latin_Capital_Letter_L_With_Acute . #\Latin_Small_Letter_L_With_Acute)
1238                (#\Latin_Capital_Letter_L_With_Cedilla . #\Latin_Small_Letter_L_With_Cedilla)
1239                (#\Latin_Capital_Letter_L_With_Caron . #\Latin_Small_Letter_L_With_Caron)
1240                (#\Latin_Capital_Letter_L_With_Middle_Dot
1241                 . #\Latin_Small_Letter_L_With_Middle_Dot)
1242                (#\Latin_Capital_Letter_L_With_Stroke . #\Latin_Small_Letter_L_With_Stroke)
1243                (#\Latin_Capital_Letter_N_With_Acute . #\Latin_Small_Letter_N_With_Acute)
1244                (#\Latin_Capital_Letter_N_With_Cedilla . #\Latin_Small_Letter_N_With_Cedilla)
1245                (#\Latin_Capital_Letter_N_With_Caron . #\Latin_Small_Letter_N_With_Caron)
1246                (#\Latin_Capital_Letter_Eng . #\Latin_Small_Letter_Eng)
1247                (#\Latin_Capital_Letter_O_With_Macron . #\Latin_Small_Letter_O_With_Macron)
1248                (#\Latin_Capital_Letter_O_With_Breve . #\Latin_Small_Letter_O_With_Breve)
1249                (#\Latin_Capital_Letter_O_With_Double_Acute
1250                 . #\Latin_Small_Letter_O_With_Double_Acute)
1251                (#\Latin_Capital_Ligature_Oe . #\Latin_Small_Ligature_Oe)
1252                (#\Latin_Capital_Letter_R_With_Acute . #\Latin_Small_Letter_R_With_Acute)
1253                (#\Latin_Capital_Letter_R_With_Cedilla . #\Latin_Small_Letter_R_With_Cedilla)
1254                (#\Latin_Capital_Letter_R_With_Caron . #\Latin_Small_Letter_R_With_Caron)
1255                (#\Latin_Capital_Letter_S_With_Acute . #\Latin_Small_Letter_S_With_Acute)
1256                (#\Latin_Capital_Letter_S_With_Circumflex
1257                 . #\Latin_Small_Letter_S_With_Circumflex)
1258                (#\Latin_Capital_Letter_S_With_Cedilla . #\Latin_Small_Letter_S_With_Cedilla)
1259                (#\Latin_Capital_Letter_S_With_Caron . #\Latin_Small_Letter_S_With_Caron)
1260                (#\Latin_Capital_Letter_T_With_Cedilla . #\Latin_Small_Letter_T_With_Cedilla)
1261                (#\Latin_Capital_Letter_T_With_Caron . #\Latin_Small_Letter_T_With_Caron)
1262                (#\Latin_Capital_Letter_T_With_Stroke . #\Latin_Small_Letter_T_With_Stroke)
1263                (#\Latin_Capital_Letter_U_With_Tilde . #\Latin_Small_Letter_U_With_Tilde)
1264                (#\Latin_Capital_Letter_U_With_Macron . #\Latin_Small_Letter_U_With_Macron)
1265                (#\Latin_Capital_Letter_U_With_Breve . #\Latin_Small_Letter_U_With_Breve)
1266                (#\Latin_Capital_Letter_U_With_Ring_Above
1267                 . #\Latin_Small_Letter_U_With_Ring_Above)
1268                (#\Latin_Capital_Letter_U_With_Double_Acute
1269                 . #\Latin_Small_Letter_U_With_Double_Acute)
1270                (#\Latin_Capital_Letter_U_With_Ogonek . #\Latin_Small_Letter_U_With_Ogonek)
1271                (#\Latin_Capital_Letter_W_With_Circumflex
1272                 . #\Latin_Small_Letter_W_With_Circumflex)
1273                (#\Latin_Capital_Letter_Y_With_Circumflex
1274                 . #\Latin_Small_Letter_Y_With_Circumflex)
1275                (#\Latin_Capital_Letter_Y_With_Diaeresis
1276                 . #\Latin_Small_Letter_Y_With_Diaeresis)
1277                (#\Latin_Capital_Letter_Z_With_Acute . #\Latin_Small_Letter_Z_With_Acute)
1278                (#\Latin_Capital_Letter_Z_With_Dot_Above
1279                 . #\Latin_Small_Letter_Z_With_Dot_Above)
1280                (#\Latin_Capital_Letter_Z_With_Caron . #\Latin_Small_Letter_Z_With_Caron)
1281                (#\Latin_Capital_Letter_B_With_Hook . #\Latin_Small_Letter_B_With_Hook)
1282                (#\Latin_Capital_Letter_B_With_Topbar . #\Latin_Small_Letter_B_With_Topbar)
1283                (#\Latin_Capital_Letter_Tone_Six . #\Latin_Small_Letter_Tone_Six)
1284                (#\Latin_Capital_Letter_Open_O . #\Latin_Small_Letter_Open_O)
1285                (#\Latin_Capital_Letter_C_With_Hook . #\Latin_Small_Letter_C_With_Hook)
1286                (#\Latin_Capital_Letter_African_D . #\Latin_Small_Letter_D_With_Tail)
1287                (#\Latin_Capital_Letter_D_With_Hook . #\Latin_Small_Letter_D_With_Hook)
1288                (#\Latin_Capital_Letter_D_With_Topbar . #\Latin_Small_Letter_D_With_Topbar)
1289                (#\Latin_Capital_Letter_Reversed_E . #\Latin_Small_Letter_Turned_E)
1290                (#\Latin_Capital_Letter_Schwa . #\Latin_Small_Letter_Schwa)
1291                (#\Latin_Capital_Letter_Open_E . #\Latin_Small_Letter_Open_E)
1292                (#\Latin_Capital_Letter_F_With_Hook . #\Latin_Small_Letter_F_With_Hook)
1293                (#\Latin_Capital_Letter_G_With_Hook . #\Latin_Small_Letter_G_With_Hook)
1294                (#\Latin_Capital_Letter_Gamma . #\Latin_Small_Letter_Gamma)
1295                (#\Latin_Capital_Letter_Iota . #\Latin_Small_Letter_Iota)
1296                (#\Latin_Capital_Letter_I_With_Stroke . #\Latin_Small_Letter_I_With_Stroke)
1297                (#\Latin_Capital_Letter_K_With_Hook . #\Latin_Small_Letter_K_With_Hook)
1298                (#\Latin_Capital_Letter_Turned_M . #\Latin_Small_Letter_Turned_M)
1299                (#\Latin_Capital_Letter_N_With_Left_Hook
1300                 . #\Latin_Small_Letter_N_With_Left_Hook)
1301                (#\Latin_Capital_Letter_O_With_Middle_Tilde . #\Latin_Small_Letter_Barred_O)
1302                (#\Latin_Capital_Letter_O_With_Horn . #\Latin_Small_Letter_O_With_Horn)
1303                (#\Latin_Capital_Letter_Oi . #\Latin_Small_Letter_Oi)
1304                (#\Latin_Capital_Letter_P_With_Hook . #\Latin_Small_Letter_P_With_Hook)
1305                (#\Latin_Letter_Yr . #\Latin_Letter_Small_Capital_R)
1306                (#\Latin_Capital_Letter_Tone_Two . #\Latin_Small_Letter_Tone_Two)
1307                (#\Latin_Capital_Letter_Esh . #\Latin_Small_Letter_Esh)
1308                (#\Latin_Capital_Letter_T_With_Hook . #\Latin_Small_Letter_T_With_Hook)
1309                (#\Latin_Capital_Letter_T_With_Retroflex_Hook
1310                 . #\Latin_Small_Letter_T_With_Retroflex_Hook)
1311                (#\Latin_Capital_Letter_U_With_Horn . #\Latin_Small_Letter_U_With_Horn)
1312                (#\Latin_Capital_Letter_Upsilon . #\Latin_Small_Letter_Upsilon)
1313                (#\Latin_Capital_Letter_V_With_Hook . #\Latin_Small_Letter_V_With_Hook)
1314                (#\Latin_Capital_Letter_Y_With_Hook . #\Latin_Small_Letter_Y_With_Hook)
1315                (#\Latin_Capital_Letter_Z_With_Stroke . #\Latin_Small_Letter_Z_With_Stroke)
1316                (#\Latin_Capital_Letter_Ezh . #\Latin_Small_Letter_Ezh)
1317                (#\Latin_Capital_Letter_Ezh_Reversed . #\Latin_Small_Letter_Ezh_Reversed)
1318                (#\Latin_Capital_Letter_Tone_Five . #\Latin_Small_Letter_Tone_Five)
1319                (#\Latin_Capital_Letter_Dz_With_Caron . #\Latin_Small_Letter_Dz_With_Caron)
1320                (#\Latin_Capital_Letter_Lj . #\Latin_Small_Letter_Lj)
1321                (#\Latin_Capital_Letter_Nj . #\Latin_Small_Letter_Nj)
1322                (#\Latin_Capital_Letter_A_With_Caron . #\Latin_Small_Letter_A_With_Caron)
1323                (#\Latin_Capital_Letter_I_With_Caron . #\Latin_Small_Letter_I_With_Caron)
1324                (#\Latin_Capital_Letter_O_With_Caron . #\Latin_Small_Letter_O_With_Caron)
1325                (#\Latin_Capital_Letter_U_With_Caron . #\Latin_Small_Letter_U_With_Caron)
1326                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Macron
1327                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Macron)
1328                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Acute
1329                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Acute)
1330                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Caron
1331                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Caron)
1332                (#\Latin_Capital_Letter_U_With_Diaeresis_And_Grave
1333                 . #\Latin_Small_Letter_U_With_Diaeresis_And_Grave)
1334                (#\Latin_Capital_Letter_A_With_Diaeresis_And_Macron
1335                 . #\Latin_Small_Letter_A_With_Diaeresis_And_Macron)
1336                (#\Latin_Capital_Letter_A_With_Dot_Above_And_Macron
1337                 . #\Latin_Small_Letter_A_With_Dot_Above_And_Macron)
1338                (#\Latin_Capital_Letter_Ae_With_Macron . #\Latin_Small_Letter_Ae_With_Macron)
1339                (#\Latin_Capital_Letter_G_With_Stroke . #\Latin_Small_Letter_G_With_Stroke)
1340                (#\Latin_Capital_Letter_G_With_Caron . #\Latin_Small_Letter_G_With_Caron)
1341                (#\Latin_Capital_Letter_K_With_Caron . #\Latin_Small_Letter_K_With_Caron)
1342                (#\Latin_Capital_Letter_O_With_Ogonek . #\Latin_Small_Letter_O_With_Ogonek)
1343                (#\Latin_Capital_Letter_O_With_Ogonek_And_Macron
1344                 . #\Latin_Small_Letter_O_With_Ogonek_And_Macron)
1345                (#\Latin_Capital_Letter_Ezh_With_Caron . #\Latin_Small_Letter_Ezh_With_Caron)
1346                (#\Latin_Capital_Letter_Dz . #\Latin_Small_Letter_Dz)
1347                (#\Latin_Capital_Letter_G_With_Acute . #\Latin_Small_Letter_G_With_Acute)
1348                (#\Latin_Capital_Letter_Hwair . #\Latin_Small_Letter_Hv)
1349                (#\Latin_Capital_Letter_Wynn . #\Latin_Letter_Wynn)
1350                (#\Latin_Capital_Letter_N_With_Grave . #\Latin_Small_Letter_N_With_Grave)
1351                (#\Latin_Capital_Letter_A_With_Ring_Above_And_Acute
1352                 . #\Latin_Small_Letter_A_With_Ring_Above_And_Acute)
1353                (#\Latin_Capital_Letter_Ae_With_Acute . #\Latin_Small_Letter_Ae_With_Acute)
1354                (#\Latin_Capital_Letter_O_With_Stroke_And_Acute
1355                 . #\Latin_Small_Letter_O_With_Stroke_And_Acute)
1356                (#\Latin_Capital_Letter_A_With_Double_Grave
1357                 . #\Latin_Small_Letter_A_With_Double_Grave)
1358                (#\Latin_Capital_Letter_A_With_Inverted_Breve
1359                 . #\Latin_Small_Letter_A_With_Inverted_Breve)
1360                (#\Latin_Capital_Letter_E_With_Double_Grave
1361                 . #\Latin_Small_Letter_E_With_Double_Grave)
1362                (#\Latin_Capital_Letter_E_With_Inverted_Breve
1363                 . #\Latin_Small_Letter_E_With_Inverted_Breve)
1364                (#\Latin_Capital_Letter_I_With_Double_Grave
1365                 . #\Latin_Small_Letter_I_With_Double_Grave)
1366                (#\Latin_Capital_Letter_I_With_Inverted_Breve
1367                 . #\Latin_Small_Letter_I_With_Inverted_Breve)
1368                (#\Latin_Capital_Letter_O_With_Double_Grave
1369                 . #\Latin_Small_Letter_O_With_Double_Grave)
1370                (#\Latin_Capital_Letter_O_With_Inverted_Breve
1371                 . #\Latin_Small_Letter_O_With_Inverted_Breve)
1372                (#\Latin_Capital_Letter_R_With_Double_Grave
1373                 . #\Latin_Small_Letter_R_With_Double_Grave)
1374                (#\Latin_Capital_Letter_R_With_Inverted_Breve
1375                 . #\Latin_Small_Letter_R_With_Inverted_Breve)
1376                (#\Latin_Capital_Letter_U_With_Double_Grave
1377                 . #\Latin_Small_Letter_U_With_Double_Grave)
1378                (#\Latin_Capital_Letter_U_With_Inverted_Breve
1379                 . #\Latin_Small_Letter_U_With_Inverted_Breve)
1380                (#\Latin_Capital_Letter_S_With_Comma_Below
1381                 . #\Latin_Small_Letter_S_With_Comma_Below)
1382                (#\Latin_Capital_Letter_T_With_Comma_Below
1383                 . #\Latin_Small_Letter_T_With_Comma_Below)
1384                (#\Latin_Capital_Letter_Yogh . #\Latin_Small_Letter_Yogh)
1385                (#\Latin_Capital_Letter_H_With_Caron . #\Latin_Small_Letter_H_With_Caron)
1386                (#\Latin_Capital_Letter_N_With_Long_Right_Leg
1387                 . #\Latin_Small_Letter_N_With_Long_Right_Leg)
1388                (#\Latin_Capital_Letter_Ou . #\Latin_Small_Letter_Ou)
1389                (#\Latin_Capital_Letter_Z_With_Hook . #\Latin_Small_Letter_Z_With_Hook)
1390                (#\Latin_Capital_Letter_A_With_Dot_Above
1391                 . #\Latin_Small_Letter_A_With_Dot_Above)
1392                (#\Latin_Capital_Letter_E_With_Cedilla . #\Latin_Small_Letter_E_With_Cedilla)
1393                (#\Latin_Capital_Letter_O_With_Diaeresis_And_Macron
1394                 . #\Latin_Small_Letter_O_With_Diaeresis_And_Macron)
1395                (#\Latin_Capital_Letter_O_With_Tilde_And_Macron
1396                 . #\Latin_Small_Letter_O_With_Tilde_And_Macron)
1397                (#\Latin_Capital_Letter_O_With_Dot_Above
1398                 . #\Latin_Small_Letter_O_With_Dot_Above)
1399                (#\Latin_Capital_Letter_O_With_Dot_Above_And_Macron
1400                 . #\Latin_Small_Letter_O_With_Dot_Above_And_Macron)
1401                (#\Latin_Capital_Letter_Y_With_Macron . #\Latin_Small_Letter_Y_With_Macron)
1402                (#\Latin_Capital_Letter_A_With_Stroke . #\U+2C65)
1403                (#\Latin_Capital_Letter_C_With_Stroke . #\Latin_Small_Letter_C_With_Stroke)
1404                (#\Latin_Capital_Letter_L_With_Bar . #\Latin_Small_Letter_L_With_Bar)
1405                (#\Latin_Capital_Letter_T_With_Diagonal_Stroke . #\U+2C66)
1406                (#\Latin_Capital_Letter_Glottal_Stop . #\Latin_Small_Letter_Glottal_Stop)
1407                (#\Latin_Capital_Letter_B_With_Stroke . #\Latin_Small_Letter_B_With_Stroke)
1408                (#\Latin_Capital_Letter_U_Bar . #\Latin_Small_Letter_U_Bar)
1409                (#\Latin_Capital_Letter_Turned_V . #\Latin_Small_Letter_Turned_V)
1410                (#\Latin_Capital_Letter_E_With_Stroke . #\Latin_Small_Letter_E_With_Stroke)
1411                (#\Latin_Capital_Letter_J_With_Stroke . #\Latin_Small_Letter_J_With_Stroke)
1412                (#\Latin_Capital_Letter_Small_Q_With_Hook_Tail
1413                 . #\Latin_Small_Letter_Q_With_Hook_Tail)
1414                (#\Latin_Capital_Letter_R_With_Stroke . #\Latin_Small_Letter_R_With_Stroke)
1415                (#\Latin_Capital_Letter_Y_With_Stroke . #\Latin_Small_Letter_Y_With_Stroke)
1416                (#\Greek_Capital_Letter_Alpha_With_Tonos
1417                 . #\Greek_Small_Letter_Alpha_With_Tonos)
1418                (#\Greek_Capital_Letter_Epsilon_With_Tonos
1419                 . #\Greek_Small_Letter_Epsilon_With_Tonos)
1420                (#\Greek_Capital_Letter_Eta_With_Tonos . #\Greek_Small_Letter_Eta_With_Tonos)
1421                (#\Greek_Capital_Letter_Iota_With_Tonos
1422                 . #\Greek_Small_Letter_Iota_With_Tonos)
1423                (#\Greek_Capital_Letter_Omicron_With_Tonos
1424                 . #\Greek_Small_Letter_Omicron_With_Tonos)
1425                (#\Greek_Capital_Letter_Upsilon_With_Tonos
1426                 . #\Greek_Small_Letter_Upsilon_With_Tonos)
1427                (#\Greek_Capital_Letter_Omega_With_Tonos
1428                 . #\Greek_Small_Letter_Omega_With_Tonos)
1429                (#\Greek_Capital_Letter_Alpha . #\Greek_Small_Letter_Alpha)
1430                (#\Greek_Capital_Letter_Beta . #\Greek_Small_Letter_Beta)
1431                (#\Greek_Capital_Letter_Gamma . #\Greek_Small_Letter_Gamma)
1432                (#\Greek_Capital_Letter_Delta . #\Greek_Small_Letter_Delta)
1433                (#\Greek_Capital_Letter_Epsilon . #\Greek_Small_Letter_Epsilon)
1434                (#\Greek_Capital_Letter_Zeta . #\Greek_Small_Letter_Zeta)
1435                (#\Greek_Capital_Letter_Eta . #\Greek_Small_Letter_Eta)
1436                (#\Greek_Capital_Letter_Theta . #\Greek_Small_Letter_Theta)
1437                (#\Greek_Capital_Letter_Iota . #\Greek_Small_Letter_Iota)
1438                (#\Greek_Capital_Letter_Kappa . #\Greek_Small_Letter_Kappa)
1439                (#\Greek_Capital_Letter_Lamda . #\Greek_Small_Letter_Lamda)
1440                (#\Greek_Capital_Letter_Mu . #\Greek_Small_Letter_Mu)
1441                (#\Greek_Capital_Letter_Nu . #\Greek_Small_Letter_Nu)
1442                (#\Greek_Capital_Letter_Xi . #\Greek_Small_Letter_Xi)
1443                (#\Greek_Capital_Letter_Omicron . #\Greek_Small_Letter_Omicron)
1444                (#\Greek_Capital_Letter_Pi . #\Greek_Small_Letter_Pi)
1445                (#\Greek_Capital_Letter_Rho . #\Greek_Small_Letter_Rho)
1446                (#\Greek_Capital_Letter_Sigma . #\Greek_Small_Letter_Sigma)
1447                (#\Greek_Capital_Letter_Tau . #\Greek_Small_Letter_Tau)
1448                (#\Greek_Capital_Letter_Upsilon . #\Greek_Small_Letter_Upsilon)
1449                (#\Greek_Capital_Letter_Phi . #\Greek_Small_Letter_Phi)
1450                (#\Greek_Capital_Letter_Chi . #\Greek_Small_Letter_Chi)
1451                (#\Greek_Capital_Letter_Psi . #\Greek_Small_Letter_Psi)
1452                (#\Greek_Capital_Letter_Omega . #\Greek_Small_Letter_Omega)
1453                (#\Greek_Capital_Letter_Iota_With_Dialytika
1454                 . #\Greek_Small_Letter_Iota_With_Dialytika)
1455                (#\Greek_Capital_Letter_Upsilon_With_Dialytika
1456                 . #\Greek_Small_Letter_Upsilon_With_Dialytika)
1457                (#\Greek_Letter_Archaic_Koppa . #\Greek_Small_Letter_Archaic_Koppa)
1458                (#\Greek_Letter_Stigma . #\Greek_Small_Letter_Stigma)
1459                (#\Greek_Letter_Digamma . #\Greek_Small_Letter_Digamma)
1460                (#\Greek_Letter_Koppa . #\Greek_Small_Letter_Koppa)
1461                (#\Greek_Letter_Sampi . #\Greek_Small_Letter_Sampi)
1462                (#\Coptic_Capital_Letter_Shei . #\Coptic_Small_Letter_Shei)
1463                (#\Coptic_Capital_Letter_Fei . #\Coptic_Small_Letter_Fei)
1464                (#\Coptic_Capital_Letter_Khei . #\Coptic_Small_Letter_Khei)
1465                (#\Coptic_Capital_Letter_Hori . #\Coptic_Small_Letter_Hori)
1466                (#\Coptic_Capital_Letter_Gangia . #\Coptic_Small_Letter_Gangia)
1467                (#\Coptic_Capital_Letter_Shima . #\Coptic_Small_Letter_Shima)
1468                (#\Coptic_Capital_Letter_Dei . #\Coptic_Small_Letter_Dei)
1469                (#\Greek_Capital_Letter_Sho . #\Greek_Small_Letter_Sho)
1470                (#\Greek_Capital_Lunate_Sigma_Symbol . #\Greek_Lunate_Sigma_Symbol)
1471                (#\Greek_Capital_Letter_San . #\Greek_Small_Letter_San)
1472                (#\Greek_Capital_Reversed_Lunate_Sigma_Symbol
1473                 . #\Greek_Small_Reversed_Lunate_Sigma_Symbol)
1474                (#\Greek_Capital_Dotted_Lunate_Sigma_Symbol
1475                 . #\Greek_Small_Dotted_Lunate_Sigma_Symbol)
1476                (#\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol
1477                 . #\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol)
1478                (#\Cyrillic_Capital_Letter_Ie_With_Grave
1479                 . #\Cyrillic_Small_Letter_Ie_With_Grave)
1480                (#\Cyrillic_Capital_Letter_Io . #\Cyrillic_Small_Letter_Io)
1481                (#\Cyrillic_Capital_Letter_Dje . #\Cyrillic_Small_Letter_Dje)
1482                (#\Cyrillic_Capital_Letter_Gje . #\Cyrillic_Small_Letter_Gje)
1483                (#\Cyrillic_Capital_Letter_Ukrainian_Ie
1484                 . #\Cyrillic_Small_Letter_Ukrainian_Ie)
1485                (#\Cyrillic_Capital_Letter_Dze . #\Cyrillic_Small_Letter_Dze)
1486                (#\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I
1487                 . #\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I)
1488                (#\Cyrillic_Capital_Letter_Yi . #\Cyrillic_Small_Letter_Yi)
1489                (#\Cyrillic_Capital_Letter_Je . #\Cyrillic_Small_Letter_Je)
1490                (#\Cyrillic_Capital_Letter_Lje . #\Cyrillic_Small_Letter_Lje)
1491                (#\Cyrillic_Capital_Letter_Nje . #\Cyrillic_Small_Letter_Nje)
1492                (#\Cyrillic_Capital_Letter_Tshe . #\Cyrillic_Small_Letter_Tshe)
1493                (#\Cyrillic_Capital_Letter_Kje . #\Cyrillic_Small_Letter_Kje)
1494                (#\Cyrillic_Capital_Letter_I_With_Grave
1495                 . #\Cyrillic_Small_Letter_I_With_Grave)
1496                (#\Cyrillic_Capital_Letter_Short_U . #\Cyrillic_Small_Letter_Short_U)
1497                (#\Cyrillic_Capital_Letter_Dzhe . #\Cyrillic_Small_Letter_Dzhe)
1498                (#\Cyrillic_Capital_Letter_A . #\Cyrillic_Small_Letter_A)
1499                (#\Cyrillic_Capital_Letter_Be . #\Cyrillic_Small_Letter_Be)
1500                (#\Cyrillic_Capital_Letter_Ve . #\Cyrillic_Small_Letter_Ve)
1501                (#\Cyrillic_Capital_Letter_Ghe . #\Cyrillic_Small_Letter_Ghe)
1502                (#\Cyrillic_Capital_Letter_De . #\Cyrillic_Small_Letter_De)
1503                (#\Cyrillic_Capital_Letter_Ie . #\Cyrillic_Small_Letter_Ie)
1504                (#\Cyrillic_Capital_Letter_Zhe . #\Cyrillic_Small_Letter_Zhe)
1505                (#\Cyrillic_Capital_Letter_Ze . #\Cyrillic_Small_Letter_Ze)
1506                (#\Cyrillic_Capital_Letter_I . #\Cyrillic_Small_Letter_I)
1507                (#\Cyrillic_Capital_Letter_Short_I . #\Cyrillic_Small_Letter_Short_I)
1508                (#\Cyrillic_Capital_Letter_Ka . #\Cyrillic_Small_Letter_Ka)
1509                (#\Cyrillic_Capital_Letter_El . #\Cyrillic_Small_Letter_El)
1510                (#\Cyrillic_Capital_Letter_Em . #\Cyrillic_Small_Letter_Em)
1511                (#\Cyrillic_Capital_Letter_En . #\Cyrillic_Small_Letter_En)
1512                (#\Cyrillic_Capital_Letter_O . #\Cyrillic_Small_Letter_O)
1513                (#\Cyrillic_Capital_Letter_Pe . #\Cyrillic_Small_Letter_Pe)
1514                (#\Cyrillic_Capital_Letter_Er . #\Cyrillic_Small_Letter_Er)
1515                (#\Cyrillic_Capital_Letter_Es . #\Cyrillic_Small_Letter_Es)
1516                (#\Cyrillic_Capital_Letter_Te . #\Cyrillic_Small_Letter_Te)
1517                (#\Cyrillic_Capital_Letter_U . #\Cyrillic_Small_Letter_U)
1518                (#\Cyrillic_Capital_Letter_Ef . #\Cyrillic_Small_Letter_Ef)
1519                (#\Cyrillic_Capital_Letter_Ha . #\Cyrillic_Small_Letter_Ha)
1520                (#\Cyrillic_Capital_Letter_Tse . #\Cyrillic_Small_Letter_Tse)
1521                (#\Cyrillic_Capital_Letter_Che . #\Cyrillic_Small_Letter_Che)
1522                (#\Cyrillic_Capital_Letter_Sha . #\Cyrillic_Small_Letter_Sha)
1523                (#\Cyrillic_Capital_Letter_Shcha . #\Cyrillic_Small_Letter_Shcha)
1524                (#\Cyrillic_Capital_Letter_Hard_Sign . #\Cyrillic_Small_Letter_Hard_Sign)
1525                (#\Cyrillic_Capital_Letter_Yeru . #\Cyrillic_Small_Letter_Yeru)
1526                (#\Cyrillic_Capital_Letter_Soft_Sign . #\Cyrillic_Small_Letter_Soft_Sign)
1527                (#\Cyrillic_Capital_Letter_E . #\Cyrillic_Small_Letter_E)
1528                (#\Cyrillic_Capital_Letter_Yu . #\Cyrillic_Small_Letter_Yu)
1529                (#\Cyrillic_Capital_Letter_Ya . #\Cyrillic_Small_Letter_Ya)
1530                (#\Cyrillic_Capital_Letter_Omega . #\Cyrillic_Small_Letter_Omega)
1531                (#\Cyrillic_Capital_Letter_Yat . #\Cyrillic_Small_Letter_Yat)
1532                (#\Cyrillic_Capital_Letter_Iotified_E . #\Cyrillic_Small_Letter_Iotified_E)
1533                (#\Cyrillic_Capital_Letter_Little_Yus . #\Cyrillic_Small_Letter_Little_Yus)
1534                (#\Cyrillic_Capital_Letter_Iotified_Little_Yus
1535                 . #\Cyrillic_Small_Letter_Iotified_Little_Yus)
1536                (#\Cyrillic_Capital_Letter_Big_Yus . #\Cyrillic_Small_Letter_Big_Yus)
1537                (#\Cyrillic_Capital_Letter_Iotified_Big_Yus
1538                 . #\Cyrillic_Small_Letter_Iotified_Big_Yus)
1539                (#\Cyrillic_Capital_Letter_Ksi . #\Cyrillic_Small_Letter_Ksi)
1540                (#\Cyrillic_Capital_Letter_Psi . #\Cyrillic_Small_Letter_Psi)
1541                (#\Cyrillic_Capital_Letter_Fita . #\Cyrillic_Small_Letter_Fita)
1542                (#\Cyrillic_Capital_Letter_Izhitsa . #\Cyrillic_Small_Letter_Izhitsa)
1543                (#\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent
1544                 . #\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent)
1545                (#\Cyrillic_Capital_Letter_Uk . #\Cyrillic_Small_Letter_Uk)
1546                (#\Cyrillic_Capital_Letter_Round_Omega . #\Cyrillic_Small_Letter_Round_Omega)
1547                (#\Cyrillic_Capital_Letter_Omega_With_Titlo
1548                 . #\Cyrillic_Small_Letter_Omega_With_Titlo)
1549                (#\Cyrillic_Capital_Letter_Ot . #\Cyrillic_Small_Letter_Ot)
1550                (#\Cyrillic_Capital_Letter_Koppa . #\Cyrillic_Small_Letter_Koppa)
1551                (#\Cyrillic_Capital_Letter_Short_I_With_Tail
1552                 . #\Cyrillic_Small_Letter_Short_I_With_Tail)
1553                (#\Cyrillic_Capital_Letter_Semisoft_Sign
1554                 . #\Cyrillic_Small_Letter_Semisoft_Sign)
1555                (#\Cyrillic_Capital_Letter_Er_With_Tick
1556                 . #\Cyrillic_Small_Letter_Er_With_Tick)
1557                (#\Cyrillic_Capital_Letter_Ghe_With_Upturn
1558                 . #\Cyrillic_Small_Letter_Ghe_With_Upturn)
1559                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke
1560                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke)
1561                (#\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook
1562                 . #\Cyrillic_Small_Letter_Ghe_With_Middle_Hook)
1563                (#\Cyrillic_Capital_Letter_Zhe_With_Descender
1564                 . #\Cyrillic_Small_Letter_Zhe_With_Descender)
1565                (#\Cyrillic_Capital_Letter_Ze_With_Descender
1566                 . #\Cyrillic_Small_Letter_Ze_With_Descender)
1567                (#\Cyrillic_Capital_Letter_Ka_With_Descender
1568                 . #\Cyrillic_Small_Letter_Ka_With_Descender)
1569                (#\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke
1570                 . #\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke)
1571                (#\Cyrillic_Capital_Letter_Ka_With_Stroke
1572                 . #\Cyrillic_Small_Letter_Ka_With_Stroke)
1573                (#\Cyrillic_Capital_Letter_Bashkir_Ka . #\Cyrillic_Small_Letter_Bashkir_Ka)
1574                (#\Cyrillic_Capital_Letter_En_With_Descender
1575                 . #\Cyrillic_Small_Letter_En_With_Descender)
1576                (#\Cyrillic_Capital_Ligature_En_Ghe . #\Cyrillic_Small_Ligature_En_Ghe)
1577                (#\Cyrillic_Capital_Letter_Pe_With_Middle_Hook
1578                 . #\Cyrillic_Small_Letter_Pe_With_Middle_Hook)
1579                (#\Cyrillic_Capital_Letter_Abkhasian_Ha
1580                 . #\Cyrillic_Small_Letter_Abkhasian_Ha)
1581                (#\Cyrillic_Capital_Letter_Es_With_Descender
1582                 . #\Cyrillic_Small_Letter_Es_With_Descender)
1583                (#\Cyrillic_Capital_Letter_Te_With_Descender
1584                 . #\Cyrillic_Small_Letter_Te_With_Descender)
1585                (#\Cyrillic_Capital_Letter_Straight_U . #\Cyrillic_Small_Letter_Straight_U)
1586                (#\Cyrillic_Capital_Letter_Straight_U_With_Stroke
1587                 . #\Cyrillic_Small_Letter_Straight_U_With_Stroke)
1588                (#\Cyrillic_Capital_Letter_Ha_With_Descender
1589                 . #\Cyrillic_Small_Letter_Ha_With_Descender)
1590                (#\Cyrillic_Capital_Ligature_Te_Tse . #\Cyrillic_Small_Ligature_Te_Tse)
1591                (#\Cyrillic_Capital_Letter_Che_With_Descender
1592                 . #\Cyrillic_Small_Letter_Che_With_Descender)
1593                (#\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke
1594                 . #\Cyrillic_Small_Letter_Che_With_Vertical_Stroke)
1595                (#\Cyrillic_Capital_Letter_Shha . #\Cyrillic_Small_Letter_Shha)
1596                (#\Cyrillic_Capital_Letter_Abkhasian_Che
1597                 . #\Cyrillic_Small_Letter_Abkhasian_Che)
1598                (#\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender
1599                 . #\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender)
1600                (#\Cyrillic_Letter_Palochka . #\Cyrillic_Small_Letter_Palochka)
1601                (#\Cyrillic_Capital_Letter_Zhe_With_Breve
1602                 . #\Cyrillic_Small_Letter_Zhe_With_Breve)
1603                (#\Cyrillic_Capital_Letter_Ka_With_Hook
1604                 . #\Cyrillic_Small_Letter_Ka_With_Hook)
1605                (#\Cyrillic_Capital_Letter_El_With_Tail
1606                 . #\Cyrillic_Small_Letter_El_With_Tail)
1607                (#\Cyrillic_Capital_Letter_En_With_Hook
1608                 . #\Cyrillic_Small_Letter_En_With_Hook)
1609                (#\Cyrillic_Capital_Letter_En_With_Tail
1610                 . #\Cyrillic_Small_Letter_En_With_Tail)
1611                (#\Cyrillic_Capital_Letter_Khakassian_Che
1612                 . #\Cyrillic_Small_Letter_Khakassian_Che)
1613                (#\Cyrillic_Capital_Letter_Em_With_Tail
1614                 . #\Cyrillic_Small_Letter_Em_With_Tail)
1615                (#\Cyrillic_Capital_Letter_A_With_Breve
1616                 . #\Cyrillic_Small_Letter_A_With_Breve)
1617                (#\Cyrillic_Capital_Letter_A_With_Diaeresis
1618                 . #\Cyrillic_Small_Letter_A_With_Diaeresis)
1619                (#\Cyrillic_Capital_Ligature_A_Ie . #\Cyrillic_Small_Ligature_A_Ie)
1620                (#\Cyrillic_Capital_Letter_Ie_With_Breve
1621                 . #\Cyrillic_Small_Letter_Ie_With_Breve)
1622                (#\Cyrillic_Capital_Letter_Schwa . #\Cyrillic_Small_Letter_Schwa)
1623                (#\Cyrillic_Capital_Letter_Schwa_With_Diaeresis
1624                 . #\Cyrillic_Small_Letter_Schwa_With_Diaeresis)
1625                (#\Cyrillic_Capital_Letter_Zhe_With_Diaeresis
1626                 . #\Cyrillic_Small_Letter_Zhe_With_Diaeresis)
1627                (#\Cyrillic_Capital_Letter_Ze_With_Diaeresis
1628                 . #\Cyrillic_Small_Letter_Ze_With_Diaeresis)
1629                (#\Cyrillic_Capital_Letter_Abkhasian_Dze
1630                 . #\Cyrillic_Small_Letter_Abkhasian_Dze)
1631                (#\Cyrillic_Capital_Letter_I_With_Macron
1632                 . #\Cyrillic_Small_Letter_I_With_Macron)
1633                (#\Cyrillic_Capital_Letter_I_With_Diaeresis
1634                 . #\Cyrillic_Small_Letter_I_With_Diaeresis)
1635                (#\Cyrillic_Capital_Letter_O_With_Diaeresis
1636                 . #\Cyrillic_Small_Letter_O_With_Diaeresis)
1637                (#\Cyrillic_Capital_Letter_Barred_O . #\Cyrillic_Small_Letter_Barred_O)
1638                (#\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis
1639                 . #\Cyrillic_Small_Letter_Barred_O_With_Diaeresis)
1640                (#\Cyrillic_Capital_Letter_E_With_Diaeresis
1641                 . #\Cyrillic_Small_Letter_E_With_Diaeresis)
1642                (#\Cyrillic_Capital_Letter_U_With_Macron
1643                 . #\Cyrillic_Small_Letter_U_With_Macron)
1644                (#\Cyrillic_Capital_Letter_U_With_Diaeresis
1645                 . #\Cyrillic_Small_Letter_U_With_Diaeresis)
1646                (#\Cyrillic_Capital_Letter_U_With_Double_Acute
1647                 . #\Cyrillic_Small_Letter_U_With_Double_Acute)
1648                (#\Cyrillic_Capital_Letter_Che_With_Diaeresis
1649                 . #\Cyrillic_Small_Letter_Che_With_Diaeresis)
1650                (#\Cyrillic_Capital_Letter_Ghe_With_Descender
1651                 . #\Cyrillic_Small_Letter_Ghe_With_Descender)
1652                (#\Cyrillic_Capital_Letter_Yeru_With_Diaeresis
1653                 . #\Cyrillic_Small_Letter_Yeru_With_Diaeresis)
1654                (#\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook
1655                 . #\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook)
1656                (#\Cyrillic_Capital_Letter_Ha_With_Hook
1657                 . #\Cyrillic_Small_Letter_Ha_With_Hook)
1658                (#\Cyrillic_Capital_Letter_Ha_With_Stroke
1659                 . #\Cyrillic_Small_Letter_Ha_With_Stroke)
1660                (#\Cyrillic_Capital_Letter_Komi_De . #\Cyrillic_Small_Letter_Komi_De)
1661                (#\Cyrillic_Capital_Letter_Komi_Dje . #\Cyrillic_Small_Letter_Komi_Dje)
1662                (#\Cyrillic_Capital_Letter_Komi_Zje . #\Cyrillic_Small_Letter_Komi_Zje)
1663                (#\Cyrillic_Capital_Letter_Komi_Dzje . #\Cyrillic_Small_Letter_Komi_Dzje)
1664                (#\Cyrillic_Capital_Letter_Komi_Lje . #\Cyrillic_Small_Letter_Komi_Lje)
1665                (#\Cyrillic_Capital_Letter_Komi_Nje . #\Cyrillic_Small_Letter_Komi_Nje)
1666                (#\Cyrillic_Capital_Letter_Komi_Sje . #\Cyrillic_Small_Letter_Komi_Sje)
1667                (#\Cyrillic_Capital_Letter_Komi_Tje . #\Cyrillic_Small_Letter_Komi_Tje)
1668                (#\Cyrillic_Capital_Letter_Reversed_Ze . #\Cyrillic_Small_Letter_Reversed_Ze)
1669                (#\Cyrillic_Capital_Letter_El_With_Hook
1670                 . #\Cyrillic_Small_Letter_El_With_Hook)
1671                (#\Armenian_Capital_Letter_Ayb . #\Armenian_Small_Letter_Ayb)
1672                (#\Armenian_Capital_Letter_Ben . #\Armenian_Small_Letter_Ben)
1673                (#\Armenian_Capital_Letter_Gim . #\Armenian_Small_Letter_Gim)
1674                (#\Armenian_Capital_Letter_Da . #\Armenian_Small_Letter_Da)
1675                (#\Armenian_Capital_Letter_Ech . #\Armenian_Small_Letter_Ech)
1676                (#\Armenian_Capital_Letter_Za . #\Armenian_Small_Letter_Za)
1677                (#\Armenian_Capital_Letter_Eh . #\Armenian_Small_Letter_Eh)
1678                (#\Armenian_Capital_Letter_Et . #\Armenian_Small_Letter_Et)
1679                (#\Armenian_Capital_Letter_To . #\Armenian_Small_Letter_To)
1680                (#\Armenian_Capital_Letter_Zhe . #\Armenian_Small_Letter_Zhe)
1681                (#\Armenian_Capital_Letter_Ini . #\Armenian_Small_Letter_Ini)
1682                (#\Armenian_Capital_Letter_Liwn . #\Armenian_Small_Letter_Liwn)
1683                (#\Armenian_Capital_Letter_Xeh . #\Armenian_Small_Letter_Xeh)
1684                (#\Armenian_Capital_Letter_Ca . #\Armenian_Small_Letter_Ca)
1685                (#\Armenian_Capital_Letter_Ken . #\Armenian_Small_Letter_Ken)
1686                (#\Armenian_Capital_Letter_Ho . #\Armenian_Small_Letter_Ho)
1687                (#\Armenian_Capital_Letter_Ja . #\Armenian_Small_Letter_Ja)
1688                (#\Armenian_Capital_Letter_Ghad . #\Armenian_Small_Letter_Ghad)
1689                (#\Armenian_Capital_Letter_Cheh . #\Armenian_Small_Letter_Cheh)
1690                (#\Armenian_Capital_Letter_Men . #\Armenian_Small_Letter_Men)
1691                (#\Armenian_Capital_Letter_Yi . #\Armenian_Small_Letter_Yi)
1692                (#\Armenian_Capital_Letter_Now . #\Armenian_Small_Letter_Now)
1693                (#\Armenian_Capital_Letter_Sha . #\Armenian_Small_Letter_Sha)
1694                (#\Armenian_Capital_Letter_Vo . #\Armenian_Small_Letter_Vo)
1695                (#\Armenian_Capital_Letter_Cha . #\Armenian_Small_Letter_Cha)
1696                (#\Armenian_Capital_Letter_Peh . #\Armenian_Small_Letter_Peh)
1697                (#\Armenian_Capital_Letter_Jheh . #\Armenian_Small_Letter_Jheh)
1698                (#\Armenian_Capital_Letter_Ra . #\Armenian_Small_Letter_Ra)
1699                (#\Armenian_Capital_Letter_Seh . #\Armenian_Small_Letter_Seh)
1700                (#\Armenian_Capital_Letter_Vew . #\Armenian_Small_Letter_Vew)
1701                (#\Armenian_Capital_Letter_Tiwn . #\Armenian_Small_Letter_Tiwn)
1702                (#\Armenian_Capital_Letter_Reh . #\Armenian_Small_Letter_Reh)
1703                (#\Armenian_Capital_Letter_Co . #\Armenian_Small_Letter_Co)
1704                (#\Armenian_Capital_Letter_Yiwn . #\Armenian_Small_Letter_Yiwn)
1705                (#\Armenian_Capital_Letter_Piwr . #\Armenian_Small_Letter_Piwr)
1706                (#\Armenian_Capital_Letter_Keh . #\Armenian_Small_Letter_Keh)
1707                (#\Armenian_Capital_Letter_Oh . #\Armenian_Small_Letter_Oh)
1708                (#\Armenian_Capital_Letter_Feh . #\Armenian_Small_Letter_Feh)
1709                (#\U+10A0 . #\U+2D00) (#\U+10A1 . #\U+2D01) (#\U+10A2 . #\U+2D02)
1710                (#\U+10A3 . #\U+2D03) (#\U+10A4 . #\U+2D04) (#\U+10A5 . #\U+2D05)
1711                (#\U+10A6 . #\U+2D06) (#\U+10A7 . #\U+2D07) (#\U+10A8 . #\U+2D08)
1712                (#\U+10A9 . #\U+2D09) (#\U+10AA . #\U+2D0A) (#\U+10AB . #\U+2D0B)
1713                (#\U+10AC . #\U+2D0C) (#\U+10AD . #\U+2D0D) (#\U+10AE . #\U+2D0E)
1714                (#\U+10AF . #\U+2D0F) (#\U+10B0 . #\U+2D10) (#\U+10B1 . #\U+2D11)
1715                (#\U+10B2 . #\U+2D12) (#\U+10B3 . #\U+2D13) (#\U+10B4 . #\U+2D14)
1716                (#\U+10B5 . #\U+2D15) (#\U+10B6 . #\U+2D16) (#\U+10B7 . #\U+2D17)
1717                (#\U+10B8 . #\U+2D18) (#\U+10B9 . #\U+2D19) (#\U+10BA . #\U+2D1A)
1718                (#\U+10BB . #\U+2D1B) (#\U+10BC . #\U+2D1C) (#\U+10BD . #\U+2D1D)
1719                (#\U+10BE . #\U+2D1E) (#\U+10BF . #\U+2D1F) (#\U+10C0 . #\U+2D20)
1720                (#\U+10C1 . #\U+2D21) (#\U+10C2 . #\U+2D22) (#\U+10C3 . #\U+2D23)
1721                (#\U+10C4 . #\U+2D24) (#\U+10C5 . #\U+2D25) (#\U+1E00 . #\U+1E01)
1722                (#\U+1E02 . #\U+1E03) (#\U+1E04 . #\U+1E05) (#\U+1E06 . #\U+1E07)
1723                (#\U+1E08 . #\U+1E09) (#\U+1E0A . #\U+1E0B) (#\U+1E0C . #\U+1E0D)
1724                (#\U+1E0E . #\U+1E0F) (#\U+1E10 . #\U+1E11) (#\U+1E12 . #\U+1E13)
1725                (#\U+1E14 . #\U+1E15) (#\U+1E16 . #\U+1E17) (#\U+1E18 . #\U+1E19)
1726                (#\U+1E1A . #\U+1E1B) (#\U+1E1C . #\U+1E1D) (#\U+1E1E . #\U+1E1F)
1727                (#\U+1E20 . #\U+1E21) (#\U+1E22 . #\U+1E23) (#\U+1E24 . #\U+1E25)
1728                (#\U+1E26 . #\U+1E27) (#\U+1E28 . #\U+1E29) (#\U+1E2A . #\U+1E2B)
1729                (#\U+1E2C . #\U+1E2D) (#\U+1E2E . #\U+1E2F) (#\U+1E30 . #\U+1E31)
1730                (#\U+1E32 . #\U+1E33) (#\U+1E34 . #\U+1E35) (#\U+1E36 . #\U+1E37)
1731                (#\U+1E38 . #\U+1E39) (#\U+1E3A . #\U+1E3B) (#\U+1E3C . #\U+1E3D)
1732                (#\U+1E3E . #\U+1E3F) (#\U+1E40 . #\U+1E41) (#\U+1E42 . #\U+1E43)
1733                (#\U+1E44 . #\U+1E45) (#\U+1E46 . #\U+1E47) (#\U+1E48 . #\U+1E49)
1734                (#\U+1E4A . #\U+1E4B) (#\U+1E4C . #\U+1E4D) (#\U+1E4E . #\U+1E4F)
1735                (#\U+1E50 . #\U+1E51) (#\U+1E52 . #\U+1E53) (#\U+1E54 . #\U+1E55)
1736                (#\U+1E56 . #\U+1E57) (#\U+1E58 . #\U+1E59) (#\U+1E5A . #\U+1E5B)
1737                (#\U+1E5C . #\U+1E5D) (#\U+1E5E . #\U+1E5F) (#\U+1E60 . #\U+1E61)
1738                (#\U+1E62 . #\U+1E63) (#\U+1E64 . #\U+1E65) (#\U+1E66 . #\U+1E67)
1739                (#\U+1E68 . #\U+1E69) (#\U+1E6A . #\U+1E6B) (#\U+1E6C . #\U+1E6D)
1740                (#\U+1E6E . #\U+1E6F) (#\U+1E70 . #\U+1E71) (#\U+1E72 . #\U+1E73)
1741                (#\U+1E74 . #\U+1E75) (#\U+1E76 . #\U+1E77) (#\U+1E78 . #\U+1E79)
1742                (#\U+1E7A . #\U+1E7B) (#\U+1E7C . #\U+1E7D) (#\U+1E7E . #\U+1E7F)
1743                (#\U+1E80 . #\U+1E81) (#\U+1E82 . #\U+1E83) (#\U+1E84 . #\U+1E85)
1744                (#\U+1E86 . #\U+1E87) (#\U+1E88 . #\U+1E89) (#\U+1E8A . #\U+1E8B)
1745                (#\U+1E8C . #\U+1E8D) (#\U+1E8E . #\U+1E8F) (#\U+1E90 . #\U+1E91)
1746                (#\U+1E92 . #\U+1E93) (#\U+1E94 . #\U+1E95) (#\U+1EA0 . #\U+1EA1)
1747                (#\U+1EA2 . #\U+1EA3) (#\U+1EA4 . #\U+1EA5) (#\U+1EA6 . #\U+1EA7)
1748                (#\U+1EA8 . #\U+1EA9) (#\U+1EAA . #\U+1EAB) (#\U+1EAC . #\U+1EAD)
1749                (#\U+1EAE . #\U+1EAF) (#\U+1EB0 . #\U+1EB1) (#\U+1EB2 . #\U+1EB3)
1750                (#\U+1EB4 . #\U+1EB5) (#\U+1EB6 . #\U+1EB7) (#\U+1EB8 . #\U+1EB9)
1751                (#\U+1EBA . #\U+1EBB) (#\U+1EBC . #\U+1EBD) (#\U+1EBE . #\U+1EBF)
1752                (#\U+1EC0 . #\U+1EC1) (#\U+1EC2 . #\U+1EC3) (#\U+1EC4 . #\U+1EC5)
1753                (#\U+1EC6 . #\U+1EC7) (#\U+1EC8 . #\U+1EC9) (#\U+1ECA . #\U+1ECB)
1754                (#\U+1ECC . #\U+1ECD) (#\U+1ECE . #\U+1ECF) (#\U+1ED0 . #\U+1ED1)
1755                (#\U+1ED2 . #\U+1ED3) (#\U+1ED4 . #\U+1ED5) (#\U+1ED6 . #\U+1ED7)
1756                (#\U+1ED8 . #\U+1ED9) (#\U+1EDA . #\U+1EDB) (#\U+1EDC . #\U+1EDD)
1757                (#\U+1EDE . #\U+1EDF) (#\U+1EE0 . #\U+1EE1) (#\U+1EE2 . #\U+1EE3)
1758                (#\U+1EE4 . #\U+1EE5) (#\U+1EE6 . #\U+1EE7) (#\U+1EE8 . #\U+1EE9)
1759                (#\U+1EEA . #\U+1EEB) (#\U+1EEC . #\U+1EED) (#\U+1EEE . #\U+1EEF)
1760                (#\U+1EF0 . #\U+1EF1) (#\U+1EF2 . #\U+1EF3) (#\U+1EF4 . #\U+1EF5)
1761                (#\U+1EF6 . #\U+1EF7) (#\U+1EF8 . #\U+1EF9) (#\U+1F08 . #\U+1F00)
1762                (#\U+1F09 . #\U+1F01) (#\U+1F0A . #\U+1F02) (#\U+1F0B . #\U+1F03)
1763                (#\U+1F0C . #\U+1F04) (#\U+1F0D . #\U+1F05) (#\U+1F0E . #\U+1F06)
1764                (#\U+1F0F . #\U+1F07) (#\U+1F18 . #\U+1F10) (#\U+1F19 . #\U+1F11)
1765                (#\U+1F1A . #\U+1F12) (#\U+1F1B . #\U+1F13) (#\U+1F1C . #\U+1F14)
1766                (#\U+1F1D . #\U+1F15) (#\U+1F28 . #\U+1F20) (#\U+1F29 . #\U+1F21)
1767                (#\U+1F2A . #\U+1F22) (#\U+1F2B . #\U+1F23) (#\U+1F2C . #\U+1F24)
1768                (#\U+1F2D . #\U+1F25) (#\U+1F2E . #\U+1F26) (#\U+1F2F . #\U+1F27)
1769                (#\U+1F38 . #\U+1F30) (#\U+1F39 . #\U+1F31) (#\U+1F3A . #\U+1F32)
1770                (#\U+1F3B . #\U+1F33) (#\U+1F3C . #\U+1F34) (#\U+1F3D . #\U+1F35)
1771                (#\U+1F3E . #\U+1F36) (#\U+1F3F . #\U+1F37) (#\U+1F48 . #\U+1F40)
1772                (#\U+1F49 . #\U+1F41) (#\U+1F4A . #\U+1F42) (#\U+1F4B . #\U+1F43)
1773                (#\U+1F4C . #\U+1F44) (#\U+1F4D . #\U+1F45) (#\U+1F59 . #\U+1F51)
1774                (#\U+1F5B . #\U+1F53) (#\U+1F5D . #\U+1F55) (#\U+1F5F . #\U+1F57)
1775                (#\U+1F68 . #\U+1F60) (#\U+1F69 . #\U+1F61) (#\U+1F6A . #\U+1F62)
1776                (#\U+1F6B . #\U+1F63) (#\U+1F6C . #\U+1F64) (#\U+1F6D . #\U+1F65)
1777                (#\U+1F6E . #\U+1F66) (#\U+1F6F . #\U+1F67) (#\U+1F88 . #\U+1F80)
1778                (#\U+1F89 . #\U+1F81) (#\U+1F8A . #\U+1F82) (#\U+1F8B . #\U+1F83)
1779                (#\U+1F8C . #\U+1F84) (#\U+1F8D . #\U+1F85) (#\U+1F8E . #\U+1F86)
1780                (#\U+1F8F . #\U+1F87) (#\U+1F98 . #\U+1F90) (#\U+1F99 . #\U+1F91)
1781                (#\U+1F9A . #\U+1F92) (#\U+1F9B . #\U+1F93) (#\U+1F9C . #\U+1F94)
1782                (#\U+1F9D . #\U+1F95) (#\U+1F9E . #\U+1F96) (#\U+1F9F . #\U+1F97)
1783                (#\U+1FA8 . #\U+1FA0) (#\U+1FA9 . #\U+1FA1) (#\U+1FAA . #\U+1FA2)
1784                (#\U+1FAB . #\U+1FA3) (#\U+1FAC . #\U+1FA4) (#\U+1FAD . #\U+1FA5)
1785                (#\U+1FAE . #\U+1FA6) (#\U+1FAF . #\U+1FA7) (#\U+1FB8 . #\U+1FB0)
1786                (#\U+1FB9 . #\U+1FB1) (#\U+1FBA . #\U+1F70) (#\U+1FBB . #\U+1F71)
1787                (#\U+1FBC . #\U+1FB3) (#\U+1FC8 . #\U+1F72) (#\U+1FC9 . #\U+1F73)
1788                (#\U+1FCA . #\U+1F74) (#\U+1FCB . #\U+1F75) (#\U+1FCC . #\U+1FC3)
1789                (#\U+1FD8 . #\U+1FD0) (#\U+1FD9 . #\U+1FD1) (#\U+1FDA . #\U+1F76)
1790                (#\U+1FDB . #\U+1F77) (#\U+1FE8 . #\U+1FE0) (#\U+1FE9 . #\U+1FE1)
1791                (#\U+1FEA . #\U+1F7A) (#\U+1FEB . #\U+1F7B) (#\U+1FEC . #\U+1FE5)
1792                (#\U+1FF8 . #\U+1F78) (#\U+1FF9 . #\U+1F79) (#\U+1FFA . #\U+1F7C)
1793                (#\U+1FFB . #\U+1F7D) (#\U+1FFC . #\U+1FF3) (#\U+2132 . #\U+214E)
1794                (#\U+2160 . #\U+2170) (#\U+2161 . #\U+2171) (#\U+2162 . #\U+2172)
1795                (#\U+2163 . #\U+2173) (#\U+2164 . #\U+2174) (#\U+2165 . #\U+2175)
1796                (#\U+2166 . #\U+2176) (#\U+2167 . #\U+2177) (#\U+2168 . #\U+2178)
1797                (#\U+2169 . #\U+2179) (#\U+216A . #\U+217A) (#\U+216B . #\U+217B)
1798                (#\U+216C . #\U+217C) (#\U+216D . #\U+217D) (#\U+216E . #\U+217E)
1799                (#\U+216F . #\U+217F) (#\U+2183 . #\U+2184) (#\U+24B6 . #\U+24D0)
1800                (#\U+24B7 . #\U+24D1) (#\U+24B8 . #\U+24D2) (#\U+24B9 . #\U+24D3)
1801                (#\U+24BA . #\U+24D4) (#\U+24BB . #\U+24D5) (#\U+24BC . #\U+24D6)
1802                (#\U+24BD . #\U+24D7) (#\U+24BE . #\U+24D8) (#\U+24BF . #\U+24D9)
1803                (#\U+24C0 . #\U+24DA) (#\U+24C1 . #\U+24DB) (#\U+24C2 . #\U+24DC)
1804                (#\U+24C3 . #\U+24DD) (#\U+24C4 . #\U+24DE) (#\U+24C5 . #\U+24DF)
1805                (#\U+24C6 . #\U+24E0) (#\U+24C7 . #\U+24E1) (#\U+24C8 . #\U+24E2)
1806                (#\U+24C9 . #\U+24E3) (#\U+24CA . #\U+24E4) (#\U+24CB . #\U+24E5)
1807                (#\U+24CC . #\U+24E6) (#\U+24CD . #\U+24E7) (#\U+24CE . #\U+24E8)
1808                (#\U+24CF . #\U+24E9) (#\U+2C00 . #\U+2C30) (#\U+2C01 . #\U+2C31)
1809                (#\U+2C02 . #\U+2C32) (#\U+2C03 . #\U+2C33) (#\U+2C04 . #\U+2C34)
1810                (#\U+2C05 . #\U+2C35) (#\U+2C06 . #\U+2C36) (#\U+2C07 . #\U+2C37)
1811                (#\U+2C08 . #\U+2C38) (#\U+2C09 . #\U+2C39) (#\U+2C0A . #\U+2C3A)
1812                (#\U+2C0B . #\U+2C3B) (#\U+2C0C . #\U+2C3C) (#\U+2C0D . #\U+2C3D)
1813                (#\U+2C0E . #\U+2C3E) (#\U+2C0F . #\U+2C3F) (#\U+2C10 . #\U+2C40)
1814                (#\U+2C11 . #\U+2C41) (#\U+2C12 . #\U+2C42) (#\U+2C13 . #\U+2C43)
1815                (#\U+2C14 . #\U+2C44) (#\U+2C15 . #\U+2C45) (#\U+2C16 . #\U+2C46)
1816                (#\U+2C17 . #\U+2C47) (#\U+2C18 . #\U+2C48) (#\U+2C19 . #\U+2C49)
1817                (#\U+2C1A . #\U+2C4A) (#\U+2C1B . #\U+2C4B) (#\U+2C1C . #\U+2C4C)
1818                (#\U+2C1D . #\U+2C4D) (#\U+2C1E . #\U+2C4E) (#\U+2C1F . #\U+2C4F)
1819                (#\U+2C20 . #\U+2C50) (#\U+2C21 . #\U+2C51) (#\U+2C22 . #\U+2C52)
1820                (#\U+2C23 . #\U+2C53) (#\U+2C24 . #\U+2C54) (#\U+2C25 . #\U+2C55)
1821                (#\U+2C26 . #\U+2C56) (#\U+2C27 . #\U+2C57) (#\U+2C28 . #\U+2C58)
1822                (#\U+2C29 . #\U+2C59) (#\U+2C2A . #\U+2C5A) (#\U+2C2B . #\U+2C5B)
1823                (#\U+2C2C . #\U+2C5C) (#\U+2C2D . #\U+2C5D) (#\U+2C2E . #\U+2C5E)
1824                (#\U+2C60 . #\U+2C61) (#\U+2C62 . #\Latin_Small_Letter_L_With_Middle_Tilde)
1825                (#\U+2C63 . #\U+1D7D) (#\U+2C64 . #\Latin_Small_Letter_R_With_Tail)
1826                (#\U+2C67 . #\U+2C68) (#\U+2C69 . #\U+2C6A) (#\U+2C6B . #\U+2C6C)
1827                (#\U+2C75 . #\U+2C76) (#\U+2C80 . #\U+2C81) (#\U+2C82 . #\U+2C83)
1828                (#\U+2C84 . #\U+2C85) (#\U+2C86 . #\U+2C87) (#\U+2C88 . #\U+2C89)
1829                (#\U+2C8A . #\U+2C8B) (#\U+2C8C . #\U+2C8D) (#\U+2C8E . #\U+2C8F)
1830                (#\U+2C90 . #\U+2C91) (#\U+2C92 . #\U+2C93) (#\U+2C94 . #\U+2C95)
1831                (#\U+2C96 . #\U+2C97) (#\U+2C98 . #\U+2C99) (#\U+2C9A . #\U+2C9B)
1832                (#\U+2C9C . #\U+2C9D) (#\U+2C9E . #\U+2C9F) (#\U+2CA0 . #\U+2CA1)
1833                (#\U+2CA2 . #\U+2CA3) (#\U+2CA4 . #\U+2CA5) (#\U+2CA6 . #\U+2CA7)
1834                (#\U+2CA8 . #\U+2CA9) (#\U+2CAA . #\U+2CAB) (#\U+2CAC . #\U+2CAD)
1835                (#\U+2CAE . #\U+2CAF) (#\U+2CB0 . #\U+2CB1) (#\U+2CB2 . #\U+2CB3)
1836                (#\U+2CB4 . #\U+2CB5) (#\U+2CB6 . #\U+2CB7) (#\U+2CB8 . #\U+2CB9)
1837                (#\U+2CBA . #\U+2CBB) (#\U+2CBC . #\U+2CBD) (#\U+2CBE . #\U+2CBF)
1838                (#\U+2CC0 . #\U+2CC1) (#\U+2CC2 . #\U+2CC3) (#\U+2CC4 . #\U+2CC5)
1839                (#\U+2CC6 . #\U+2CC7) (#\U+2CC8 . #\U+2CC9) (#\U+2CCA . #\U+2CCB)
1840                (#\U+2CCC . #\U+2CCD) (#\U+2CCE . #\U+2CCF) (#\U+2CD0 . #\U+2CD1)
1841                (#\U+2CD2 . #\U+2CD3) (#\U+2CD4 . #\U+2CD5) (#\U+2CD6 . #\U+2CD7)
1842                (#\U+2CD8 . #\U+2CD9) (#\U+2CDA . #\U+2CDB) (#\U+2CDC . #\U+2CDD)
1843                (#\U+2CDE . #\U+2CDF) (#\U+2CE0 . #\U+2CE1) (#\U+2CE2 . #\U+2CE3)
1844                (#\U+FF21 . #\U+FF41) (#\U+FF22 . #\U+FF42) (#\U+FF23 . #\U+FF43)
1845                (#\U+FF24 . #\U+FF44) (#\U+FF25 . #\U+FF45) (#\U+FF26 . #\U+FF46)
1846                (#\U+FF27 . #\U+FF47) (#\U+FF28 . #\U+FF48) (#\U+FF29 . #\U+FF49)
1847                (#\U+FF2A . #\U+FF4A) (#\U+FF2B . #\U+FF4B) (#\U+FF2C . #\U+FF4C)
1848                (#\U+FF2D . #\U+FF4D) (#\U+FF2E . #\U+FF4E) (#\U+FF2F . #\U+FF4F)
1849                (#\U+FF30 . #\U+FF50) (#\U+FF31 . #\U+FF51) (#\U+FF32 . #\U+FF52)
1850                (#\U+FF33 . #\U+FF53) (#\U+FF34 . #\U+FF54) (#\U+FF35 . #\U+FF55)
1851                (#\U+FF36 . #\U+FF56) (#\U+FF37 . #\U+FF57) (#\U+FF38 . #\U+FF58)
1852                (#\U+FF39 . #\U+FF59) (#\U+FF3A . #\U+FF5A) (#\U+10400 . #\U+10428)
1853                (#\U+10401 . #\U+10429) (#\U+10402 . #\U+1042A) (#\U+10403 . #\U+1042B)
1854                (#\U+10404 . #\U+1042C) (#\U+10405 . #\U+1042D) (#\U+10406 . #\U+1042E)
1855                (#\U+10407 . #\U+1042F) (#\U+10408 . #\U+10430) (#\U+10409 . #\U+10431)
1856                (#\U+1040A . #\U+10432) (#\U+1040B . #\U+10433) (#\U+1040C . #\U+10434)
1857                (#\U+1040D . #\U+10435) (#\U+1040E . #\U+10436) (#\U+1040F . #\U+10437)
1858                (#\U+10410 . #\U+10438) (#\U+10411 . #\U+10439) (#\U+10412 . #\U+1043A)
1859                (#\U+10413 . #\U+1043B) (#\U+10414 . #\U+1043C) (#\U+10415 . #\U+1043D)
1860                (#\U+10416 . #\U+1043E) (#\U+10417 . #\U+1043F) (#\U+10418 . #\U+10440)
1861                (#\U+10419 . #\U+10441) (#\U+1041A . #\U+10442) (#\U+1041B . #\U+10443)
1862                (#\U+1041C . #\U+10444) (#\U+1041D . #\U+10445) (#\U+1041E . #\U+10446)
1863                (#\U+1041F . #\U+10447) (#\U+10420 . #\U+10448) (#\U+10421 . #\U+10449)
1864                (#\U+10422 . #\U+1044A) (#\U+10423 . #\U+1044B) (#\U+10424 . #\U+1044C)
1865                (#\U+10425 . #\U+1044D) (#\U+10426 . #\U+1044E) (#\U+10427 . #\U+1044F)))
1866  (destructuring-bind (upper . lower) pair
1867    (setf (gethash upper *non-standard-upper-to-lower*) lower
1868          (gethash lower *non-standard-lower-to-upper*) upper)))
1869
1870(assert-hash-table-readonly *non-standard-upper-to-lower*)
1871(assert-hash-table-readonly *non-standard-lower-to-upper*)
1872
1873(defun %non-standard-upper-case-equivalent (char)
1874  (gethash char *non-standard-lower-to-upper*))
1875
1876;;;True for a-z, and maybe other things.
1877(defun lower-case-p (c)
1878  "The argument must be a character object; LOWER-CASE-P returns T if the
1879   argument is a lower-case character, NIL otherwise."
1880  (let ((code (char-code c)))
1881    (if (< code #x80)
1882      (and (>= code (char-code #\a))
1883           (<= code (char-code #\z)))
1884     (not (null (%non-standard-upper-case-equivalent c))))))
1885
1886
1887;;;True for a-z A-Z, others.
1888
1889
1890(defun alpha-char-p (c)
1891  "The argument must be a character object. ALPHA-CHAR-P returns T if the
1892   argument is an alphabetic character; otherwise NIL."
1893  (let* ((code (char-code c)))
1894    (declare (fixnum code))
1895    (or (and (>= code (char-code #\A)) (<= code (char-code #\Z)))
1896        (and (>= code (char-code #\a)) (<= code (char-code #\z)))
1897        (and (>= code #x80)
1898             (or (not (null (%non-standard-upper-case-equivalent c)))
1899                 (not (null (%non-standard-lower-case-equivalent c))))))))
1900
1901
1902
1903
1904;;; def-accessors type-tracking stuff.  Used by inspector
1905(defvar *def-accessor-types* nil)
1906
1907(defun add-accessor-types (types names)
1908  (dolist (type types)
1909    (let ((cell (or (assq type *def-accessor-types*)
1910                    (car (push (cons type nil) *def-accessor-types*)))))
1911      (setf (cdr cell) (if (vectorp names) names (%list-to-uvector nil names))))))
1912
1913
1914;;; Some simple explicit storage management for cons cells
1915
1916(def-standard-initial-binding *cons-pool* (%cons-pool nil))
1917
1918(defun cheap-cons (car cdr)
1919  (let* ((pool *cons-pool*)
1920         (cons (pool.data pool)))
1921    (if cons
1922      (locally (declare (type cons cons))
1923        (setf (pool.data pool) (cdr cons)
1924              (car cons) car
1925              (cdr cons) cdr)
1926        cons)
1927      (cons car cdr))))
1928
1929(defun free-cons (cons)
1930  (when (consp cons)
1931    (locally (declare (type cons cons))
1932      (setf (car cons) nil
1933            (cdr cons) nil)
1934      (let* ((pool *cons-pool*)
1935             (freelist (pool.data pool)))
1936        (setf (pool.data pool) cons
1937              (cdr cons) freelist)))))
1938
1939(defun cheap-copy-list (list)
1940  (let ((l list)
1941        res)
1942    (loop
1943      (when (atom l)
1944        (return (nreconc res l)))
1945      (setq res (cheap-cons (pop l) res)))))
1946
1947(defun cheap-list (&rest args)
1948  (declare (dynamic-extent args))
1949  (cheap-copy-list args))
1950
1951;;; Works for dotted lists
1952(defun cheap-free-list (list)
1953  (let ((l list)
1954        next-l)
1955    (loop
1956      (setq next-l (cdr l))
1957      (free-cons l)
1958      (when (atom (setq l next-l))
1959        (return)))))
1960
1961(defmacro pop-and-free (place)
1962  (setq place (require-type place 'symbol))     ; all I need for now.
1963  (let ((list (gensym))
1964        (cdr (gensym)))
1965    `(let* ((,list ,place)
1966            (,cdr (cdr ,list)))
1967       (prog1
1968         (car ,list)
1969         (setf ,place ,cdr)
1970         (free-cons ,list)))))
1971
1972;;; Support for defresource & using-resource macros
1973(defun make-resource (constructor &key destructor initializer)
1974  (%cons-resource constructor destructor initializer))
1975
1976(defun allocate-resource (resource)
1977  (setq resource (require-type resource 'resource))
1978  (with-lock-grabbed ((resource.lock resource))
1979    (let ((pool (resource.pool resource))
1980          res)
1981      (let ((data (pool.data pool)))
1982        (when data
1983          (setf res (car data)
1984                (pool.data pool) (cdr (the cons data)))
1985          (free-cons data)))
1986      (if res
1987        (let ((initializer (resource.initializer resource)))
1988          (when initializer
1989            (funcall initializer res)))
1990        (setq res (funcall (resource.constructor resource))))
1991      res)))
1992
1993(defun free-resource (resource instance)
1994  (setq resource (require-type resource 'resource))
1995  (with-lock-grabbed ((resource.lock resource))
1996    (let ((pool (resource.pool resource))
1997          (destructor (resource.destructor resource)))
1998      (when destructor
1999        (funcall destructor instance))
2000      (setf (pool.data pool)
2001            (cheap-cons instance (pool.data pool)))))
2002  resource)
2003
2004
2005
2006
2007(defpackage #.(ftd-interface-package-name
2008               (backend-target-foreign-type-data *target-backend*))
2009  (:nicknames "OS")
2010  (:use "COMMON-LISP"))
2011
2012
2013
Note: See TracBrowser for help on using the repository browser.