source: trunk/source/level-1/l1-aprims.lisp @ 15232

Last change on this file since 15232 was 15155, checked in by gb, 8 years ago

Keep process-whostate in a (CONS) cell in a slot in the PROCESS
object, not in a thread-local binding (so that we don't have to
suspend a process to print it.)

WITH-PROCESS-WHOSTATE needs to access this slot once and RPLACA it a
couple of times and needs to use UNWIND-PROTECT.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 125.6 KB
Line 
1;;;-*-Mode: LISP; Package: CCL -*-
2;;;
3;;;   Copyright (C) 2009 Clozure Associates
4;;;   Copyright (C) 1994-2001 Digitool, Inc
5;;;   This file is part of Clozure CL. 
6;;;
7;;;   Clozure CL is licensed under the terms of the Lisp Lesser GNU Public
8;;;   License , known as the LLGPL and distributed with Clozure CL as the
9;;;   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
10;;;   which is distributed with Clozure CL as the file "LGPL".  Where these
11;;;   conflict, the preamble takes precedence. 
12;;;
13;;;   Clozure CL is referenced in the preamble as the "LIBRARY."
14;;;
15;;;   The LLGPL is also available online at
16;;;   http://opensource.franz.com/preamble.html
17
18;; L1-aprims.lisp
19
20
21(in-package "CCL")
22
23
24(let* ((standard-initial-bindings ())
25       (standard-initial-bindings-lock (make-read-write-lock)))
26
27  (defun standard-initial-bindings ()
28    (with-read-lock (standard-initial-bindings-lock)
29      (copy-list standard-initial-bindings)))
30
31  (defun define-standard-initial-binding (symbol initform)
32    (setq symbol (require-type symbol 'symbol))
33    (%proclaim-special symbol)
34    (unless (boundp symbol)
35      (set symbol (funcall initform)))
36    (with-write-lock (standard-initial-bindings-lock)
37      (let* ((pair (assoc symbol standard-initial-bindings)))
38        (if pair
39          (setf (cdr pair) initform)
40          (push (cons symbol initform) standard-initial-bindings))))
41    (record-source-file symbol 'variable)
42    symbol))
43
44(defstatic *kernel-tcr-area-lock* (%make-lock (%null-ptr) "Kernel tcr-area-lock"))
45
46(defstatic *kernel-exception-lock* (%make-lock (%null-ptr) "Kernel exception-lock"))
47 
48(def-ccl-pointers kernel-locks ()
49  (let* ((p (recursive-lock-ptr *kernel-tcr-area-lock*))
50         (q (recursive-lock-ptr *kernel-exception-lock*)))
51    (%revive-macptr p)
52    (%revive-macptr q)
53    (%get-kernel-global-ptr area-lock p)
54    (%get-kernel-global-ptr exception-lock q)))
55
56(def-standard-initial-binding *package*)
57(def-standard-initial-binding *random-state* (initial-random-state))
58(def-standard-initial-binding *error-print-length* 20)
59(def-standard-initial-binding *error-print-level* 8)
60
61(defun %badarg (arg type)
62  (%err-disp $XWRONGTYPE arg type))
63
64(defun atom (arg)
65  "Return true if OBJECT is an ATOM, and NIL otherwise."
66  (not (consp arg)))
67
68(defun list (&rest args)
69  "Return constructs and returns a list of its arguments."
70  args)
71
72(%fhave '%temp-list #'list)
73
74(defun list* (arg &rest others)
75  "Return a list of the arguments with last cons a dotted pair"
76  (cond ((null others) arg)
77        ((null (cdr others)) (cons arg (car others)))
78        (t (do ((x others (cdr x)))
79               ((null (cddr x)) (rplacd x (cadr x))))
80           (cons arg others))))
81
82
83
84(defun funcall (fn &rest args)
85  "Call FUNCTION with the given ARGUMENTS."
86  (declare (dynamic-extent args))
87  (apply fn args))
88
89
90(defun apply (function arg &rest args)
91  "Apply FUNCTION to a list of arguments produced by evaluating ARGUMENTS in
92   the manner of LIST*. That is, a list is made of the values of all but the
93   last argument, appended to the value of the last argument, which must be a
94   list."
95  (declare (dynamic-extent args))
96  (cond ((null args)
97         (apply function arg))
98        ((null (cdr args))
99         (apply function arg (car args)))
100        (t (do* ((a1 args a2)
101                 (a2 (cdr args) (cdr a2)))
102                ((atom (cdr a2))
103                 (rplacd a1 (car a2))
104                 (apply function arg args))))))
105
106
107;;; This is not fast, but it gets the functionality that
108;;; Wood and possibly other code depend on.
109(defun applyv (function arg &rest other-args)
110  (declare (dynamic-extent other-args))
111  (let* ((other-args (cons arg other-args))
112         (last-arg (car (last other-args)))
113         (last-arg-length (length last-arg))
114         (butlast-args (nbutlast other-args))
115         (rest-args (make-list last-arg-length))
116         (rest-args-tail rest-args))
117    (declare (dynamic-extent other-args rest-args))
118    (dotimes (i last-arg-length)
119      (setf (car rest-args-tail) (aref last-arg i))
120      (pop rest-args-tail))
121    (apply function (nconc butlast-args rest-args))))
122
123;;; This is slow, and since %apply-lexpr isn't documented either,
124;;; nothing in the world should depend on it.  This is just being
125;;; anal retentive.  VERY anal retentive.
126
127(defun %apply-lexpr (function arg &rest args)
128  (cond ((null args) (%apply-lexpr function arg))
129        (t (apply function arg (nconc (nbutlast args)
130                                      (collect-lexpr-args (car (last args)) 0))))))
131
132
133(defun values-list (arg)
134  "Return all of the elements of LIST, in order, as values."
135  (apply #'values arg))
136
137
138
139
140
141
142; copy-list
143
144(defun copy-list (list)
145  "Return a new list which is EQUAL to LIST."
146  (if list
147    (let ((result (cons (car list) '()) ))
148      (do ((x (cdr list) (cdr x))
149           (splice result
150                   (%cdr (%rplacd splice (cons (%car x) '() ))) ))
151          ((atom x) (unless (null x)
152                      (%rplacd splice x)) result)))))
153
154(defun alt-list-length (l)
155  "Detect (and complain about) cirucular lists; allow any atom to
156terminate the list"
157  (do* ((n 0 (1+ n))
158        (fast l)
159        (slow l))
160       ((atom fast) n)
161    (declare (fixnum n))
162    (setq fast (cdr fast))
163    (if (logbitp 0 n)
164      (if (eq (setq slow (cdr slow)) fast)
165        (%err-disp $XIMPROPERLIST l)))))
166
167
168(defun last (list &optional (n 1))
169  "Return the last N conses (not the last element!) of a list."
170  (if (and (typep n 'fixnum)
171           (>= (the fixnum n) 0))
172    (locally (declare (fixnum n))
173      (do* ((checked-list list (cdr checked-list))
174            (returned-list list)
175            (index 0 (1+ index)))
176           ((atom checked-list) returned-list)
177        (declare (type fixnum index))
178        (if (>= index n)
179          (pop returned-list))))
180    (if (and (typep n 'bignum)
181             (> n 0))
182      (require-type list 'list)
183      (report-bad-arg  n 'unsigned-byte))))
184
185
186
187
188
189(defun nthcdr (index list)
190  "Performs the cdr function n times on a list."
191  (setq list (require-type list 'list))
192  (if (and (typep index 'fixnum)
193           (>= (the fixnum index) 0))
194      (locally (declare (fixnum index))
195        (dotimes (i index list)
196          (when (null (setq list (cdr list))) (return))))
197      (progn
198        (unless (typep index 'unsigned-byte)
199          (report-bad-arg index 'unsigned-byte))
200        (do* ((n index (- n target::target-most-positive-fixnum)))
201             ((typep n 'fixnum) (nthcdr n list))
202          (unless (setq list (nthcdr target::target-most-positive-fixnum list))
203            (return))))))
204
205
206(defun nth (index list)
207  "Return the nth object in a list where the car is the zero-th element."
208  (car (nthcdr index list)))
209
210
211(defun nconc (&rest lists)
212  (declare (dynamic-extent lists))
213  "Concatenates the lists given as arguments (by changing them)"
214  (do* ((top lists (cdr top)))
215       ((null top) nil)
216    (let* ((top-of-top (car top)))
217      (cond
218       ((consp top-of-top)
219        (let* ((result top-of-top)
220               (splice result))
221          (do* ((elements (cdr top) (cdr elements)))
222                 ((endp elements))
223            (let ((ele (car elements)))
224              (typecase ele
225                (cons (rplacd (last splice) ele)
226                      (setf splice ele))
227                (null (rplacd (last splice) nil))
228                (atom (if (cdr elements)
229                        (report-bad-arg ele 'list)
230                        (rplacd (last splice) ele)))
231                (t (report-bad-arg ele 'list)))))
232          (return result)))
233       ((null top-of-top) nil)
234       (t
235        (if (cdr top)
236          (report-bad-arg top-of-top 'list)
237          (return top-of-top)))))))
238
239
240(defvar %setf-function-names% (make-hash-table :weak t :test 'eq))
241(defvar %setf-function-name-inverses% (make-hash-table :weak t :test 'eq))
242
243(defun setf-function-name (sym)
244  "Returns the symbol in the SETF package that holds the binding of (SETF sym)"
245   (or (gethash sym %setf-function-names%)
246       (progn
247         (let* ((setf-package-sym (construct-setf-function-name sym)))
248           (setf (gethash setf-package-sym %setf-function-name-inverses%) sym
249                 (gethash sym %setf-function-names%) setf-package-sym)))))
250
251(defun existing-setf-function-name (sym)
252  (gethash sym %setf-function-names%))
253
254(defun maybe-setf-name (sym)
255  (let* ((other (gethash sym %setf-function-name-inverses%)))
256    (if other
257      `(setf ,other)
258      sym)))
259
260                     
261
262(defconstant *setf-package* (or (find-package "SETF") (make-package "SETF" :use nil :external-size 1)))
263
264(defun construct-setf-function-name (sym)
265  (let ((pkg (symbol-package sym)))
266    (setq sym (symbol-name sym))
267    (if (null pkg)
268      (gentemp sym *setf-package*)
269      (values
270       (intern
271        ;;I wonder, if we didn't check, would anybody report it as a bug?
272        (if (not (%str-member #\: (setq pkg (package-name pkg))))
273          (%str-cat pkg "::" sym)
274          (%str-cat (prin1-to-string pkg) "::" (princ-to-string sym)))
275        *setf-package*)))))
276
277(defun setf-function-name-p (name)
278  (and (consp name)
279             (consp (%cdr name))
280             (null (%cddr name))
281             (symbolp (%cadr name))
282             (eq (car name) 'setf)))
283
284(defun valid-function-name-p (name)
285  (if (symbolp name)                    ; Nil is a valid function name.  I guess.
286    (values t name)
287    (if (setf-function-name-p name)
288      (values t (setf-function-name (%cadr name)))
289      ; What other kinds of function names do we care to support ?
290      (values nil nil))))
291
292;;; Why isn't this somewhere else ?
293(defun ensure-valid-function-name (name)
294  (multiple-value-bind (valid-p nm) (valid-function-name-p name)
295    (if valid-p nm (error "Invalid function name ~s." name))))
296
297
298(defun maybe-setf-function-name (name)
299  (if (setf-function-name-p name)
300    (setf-function-name (cadr name))
301    name))
302
303
304;;; Returns index if char appears in string, else nil.
305
306(defun %str-member (char string &optional start end)
307  (let* ((base-string-p (typep string 'simple-base-string)))
308    (unless base-string-p
309      (setq string (require-type string 'simple-string)))
310    (unless (characterp char)
311      (setq char (require-type char 'character)))
312    (do* ((i (or start 0) (1+ i))
313            (n (or end (uvsize string))))
314           ((= i n))
315        (declare (fixnum i n) (optimize (speed 3) (safety 0)))
316        (if (eq (schar (the simple-base-string string) i) char)
317          (return i)))))
318
319
320
321;;; Returns index of elt in vector, or nil if it's not there.
322(defun %vector-member (elt vector)
323  (unless (typep vector 'simple-vector)
324    (report-bad-arg vector 'simple-vector))
325  (dotimes (i (the fixnum (length vector)))
326    (when (eq elt (%svref vector i)) (return i))))
327
328(defun logical-pathname-p (thing) (istruct-typep thing 'logical-pathname))
329
330;;; It's back ...
331(defun list-nreverse (list)
332  (nreconc list nil))
333
334;;; We probably want to make this smarter so that less boxing
335;;; (and bignum/double-float consing!) takes place.
336
337(defun vector-nreverse (v)
338  (let* ((len (length v))
339         (middle (ash (the fixnum len) -1)))
340    (declare (fixnum middle len))
341    (do* ((left 0 (1+ left))
342          (right (1- len) (1- right)))
343         ((= left middle) v)
344      (declare (fixnum left right))
345      (rotatef (aref v left) (aref v right)))))
346   
347(defun nreverse (seq)
348  "Return a sequence of the same elements in reverse order; the argument
349   is destroyed."
350  (when seq
351    (seq-dispatch seq
352                  (list-nreverse seq)
353                  (vector-nreverse seq))))
354
355(defun nreconc (x y)
356  "Return (NCONC (NREVERSE X) Y)."
357  (do ((1st (cdr x) (if (endp 1st) 1st (cdr 1st)))
358       (2nd x 1st)              ;2nd follows first down the list.
359       (3rd y 2nd))             ;3rd follows 2nd down the list.
360      ((atom 2nd) 3rd)
361    (rplacd 2nd 3rd)))
362
363;;; The two-arg case is maybe a bit faster.  We -don't- want to
364;;; do the two-arg case repeatedly to implement the N-arg case.
365(defun append (&rest lists)
366  (declare (dynamic-extent lists))
367  "Construct a new list by concatenating the list arguments"
368  (if lists
369    (let* ((head (cons nil nil))
370           (tail head))
371      (declare (dynamic-extent head)
372               (cons head tail))
373      (do* ()
374           ((null lists) (cdr head))
375        (let* ((list (pop lists)))
376          (if (null lists)
377            (rplacd tail list)
378            (dolist (element list)
379                (setq tail (cdr (rplacd tail (cons element nil)))))))))))
380
381(defun list-reverse (l)
382  (do* ((new ()))
383       ((null l) new)
384    (push (pop l) new)))
385
386; Again, it's worth putting more work into this when the dust settles.
387(defun vector-reverse (v)
388  (let* ((len (length v))
389         (new (make-array (the fixnum len) :element-type (array-element-type v))))   ; a LOT more work ...
390    (declare (fixnum len))
391    (do* ((left 0 (1+ left))
392          (right (1- len) (1- right)))
393         ((= left len) new)
394      (declare (fixnum left right))
395      (setf (uvref new left)
396            (aref v right)))))
397
398(defun reverse (seq)
399  "Return a new sequence containing the same elements but in reverse order."
400  (seq-dispatch seq (list-reverse seq) (vector-reverse seq)))
401
402(defun check-sequence-bounds (seq start end)
403  (flet ((bad-sequence-interval (seq start end)
404           (unless (typep start 'unsigned-byte)
405             (report-bad-arg start 'unsigned-byte))
406           (if (and end (not (typep end 'unsigned-byte)))
407             (report-bad-arg end '(or null unsigned-byte)))
408           (error "Bad interval for sequence operation on ~s : start = ~s, end = ~s" seq start end)))
409  (let* ((length (length seq)))
410    (declare (fixnum length))
411    (if (and (typep start 'fixnum)
412             (<= 0 (the fixnum start))
413             (if (null end)
414               (<= (the fixnum start) (the fixnum (setq end length)))
415               (and (typep end 'fixnum)
416                    (<= (the fixnum start) (the fixnum end))
417                    (<= (the fixnum end) (the fixnum length)))))
418
419      end
420      (bad-sequence-interval seq start end)))))
421
422 
423
424(defun byte-length (string &optional  (start 0) end)
425  (setq end (check-sequence-bounds string start end))
426  (- end start))
427
428
429
430(defun make-cstring (string)
431  (let* ((len (length string)))
432    (declare (fixnum len))
433    (let* ((s (malloc (the fixnum (1+ len)))))
434      (setf (%get-byte s len) 0)
435      (multiple-value-bind (data offset) (array-data-and-offset string)
436        (dotimes (i len s)
437          (setf (%get-unsigned-byte s i) (%scharcode data (+ offset i))))
438        s))))
439
440(defun move-string-bytes (source dest off1 off2 n)
441  (declare (fixnum off1 off2 n)
442           (simple-base-string source dest)
443           (optimize (speed 3) (safety 0)))
444  (dotimes (i n dest)
445    (setf (schar dest off2) (schar source off1))
446    (incf off1)
447    (incf off2)))
448
449
450(defun %str-cat (s1 s2 &rest more)
451  (declare (dynamic-extent more))
452  (require-type s1 'simple-string)
453  (require-type s2 'simple-string)
454  (let* ((len1 (length s1))
455         (len2 (length s2))
456         (len (%i+ len2 len1)))
457    (declare (optimize (speed 3)(safety 0)))
458    (dolist (s more)
459      (require-type s 'simple-string)
460      (setq len (+ len (length s))))
461    (let ((new-string (make-string len :element-type 'base-char)))
462      (move-string-bytes s1 new-string 0 0 len1)
463      (move-string-bytes s2 new-string 0 len1 len2)
464      (dolist (s more)
465        (setq len2 (%i+ len1 len2))
466        (move-string-bytes s new-string 0 len2 (setq len1 (length s))))
467      new-string)))
468
469
470(defun %substr (str start end)
471  (require-type start 'fixnum)
472  (require-type end 'fixnum)
473  (require-type str 'string)
474  (let ((len (length str)))
475    (multiple-value-bind (str strb)(array-data-and-offset str)
476      (let ((newlen (%i- end start)))
477        (when (%i> end len)(error "End ~S exceeds length ~S." end len))
478        (when (%i< start 0)(error "Negative start"))
479        (let ((new (make-string newlen)))
480          (do* ((i 0 (1+ i))
481                (pos (%i+ start strb) (1+ pos)))
482               ((= i newlen) new)
483            (declare (fixnum i pos))
484            (setf (schar new i) (schar str pos))))))))
485
486
487
488;;; 3 callers
489(defun %list-to-uvector (subtype list)   ; subtype may be nil (meaning simple-vector
490  (let* ((n (length list))
491         (new (%alloc-misc n (or subtype target::subtag-simple-vector))))  ; yech
492    (dotimes (i n)
493      (declare (fixnum i))
494      (uvset new i (%car list))
495      (setq list (%cdr list)))
496    new))
497
498
499; appears to be unused
500(defun upgraded-array-element-type (type &optional env)
501  "Return the element type that will actually be used to implement an array
502   with the specifier :ELEMENT-TYPE Spec."
503  (declare (ignore env))
504  (element-subtype-type (element-type-subtype type)))
505
506(defun upgraded-complex-part-type (type &optional env)
507  (declare (ignore env))
508  (declare (ignore type))               ; Ok, ok.  So (upgraded-complex-part-type 'bogus) is 'REAL. So ?
509  'real)
510
511
512#+ppc32-target
513(progn
514  (defparameter array-element-subtypes
515    #(single-float 
516      (unsigned-byte 32)
517      (signed-byte 32)
518      fixnum
519      base-char                         ;ucs4
520      (unsigned-byte 8)
521      (signed-byte 8)
522      base-char
523      (unsigned-byte 16)
524      (signed-byte 16)
525      double-float
526      bit))
527 
528  ;; given uvector subtype - what is the corresponding element-type
529  (defun element-subtype-type (subtype)
530    (declare (fixnum subtype))
531    (if  (= subtype ppc32::subtag-simple-vector) t
532        (svref array-element-subtypes 
533               (ash (- subtype ppc32::min-cl-ivector-subtag) (- ppc32::ntagbits)))))
534  )
535
536#+x8632-target
537(progn
538  (defparameter array-element-subtypes
539    #(single-float 
540      (unsigned-byte 32)
541      (signed-byte 32)
542      fixnum
543      base-char                         ;ucs4
544      (unsigned-byte 8)
545      (signed-byte 8)
546      base-char
547      (unsigned-byte 16)
548      (signed-byte 16)
549      double-float
550      bit))
551 
552  ;; given uvector subtype - what is the corresponding element-type
553  (defun element-subtype-type (subtype)
554    (declare (fixnum subtype))
555    (if  (= subtype x8632::subtag-simple-vector) t
556        (svref array-element-subtypes 
557               (ash (- subtype x8632::min-cl-ivector-subtag) (- x8632::ntagbits)))))
558  )
559
560#+ppc64-target
561(progn
562
563(defparameter array-element-subtypes
564  #(bogus
565    bogus
566    bogus
567    bogus
568    (signed-byte 8)
569    (signed-byte 16)
570    (signed-byte 32)
571    (signed-byte 64)
572    (unsigned-byte 8)
573    (unsigned-byte 16)
574    (unsigned-byte 32)
575    (unsigned-byte 64)
576    bogus
577    bogus
578    single-float
579    fixnum
580    bogus
581    bogus
582    bogus
583    double-float
584    bogus
585    bogus
586    base-char
587    bogus
588    bogus
589    bogus
590    bogus
591    bogus
592    bogus
593    bit
594    bogus
595    bogus)) 
596
597 
598  ;;; given uvector subtype - what is the corresponding element-type
599  (defun element-subtype-type (subtype)
600    (declare (fixnum subtype))
601    (if  (= subtype ppc64::subtag-simple-vector)
602      t
603      (svref array-element-subtypes 
604             (ash (- subtype 128) -2))))
605  )
606
607#+x8664-target
608(progn
609
610  ;;; 1, 8, 16-bit element types
611  (defparameter *immheader-0-array-element-types*
612    #(bogus
613      bogus
614      bogus
615      bogus
616      bogus
617      bogus
618      bogus
619      bogus
620      bogus
621      bogus
622      (signed-byte 16)
623      (unsigned-byte 16)
624      base-char
625      (signed-byte 8)
626      (unsigned-byte 8)
627      bit))
628
629  ;;; 32-bit element types
630  (defparameter *immheader-1-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      base-char
644      (signed-byte 32)
645      (unsigned-byte 32)
646      single-float))
647
648  ;;; 64-bit element types
649  (defparameter *immheader-2-array-element-types*
650    #(bogus
651      bogus
652      bogus
653      bogus
654      bogus
655      bogus
656      bogus
657      bogus
658      bogus
659      bogus
660      bogus
661      bogus
662      fixnum
663      (signed-byte 64)
664      (unsigned-byte 64)
665      double-float)) 
666     
667 
668  (defun element-subtype-type (subtype)
669    (declare (type (unsigned-byte 8) subtype))
670    (if (= subtype x8664::subtag-simple-vector)
671      t
672      (let* ((class (ash subtype (- x8664::ntagbits)))
673             (tag (logand subtype x8664::fulltagmask)))
674        (declare (type (unsigned-byte 4) class tag))
675        (cond ((= tag x8664::fulltag-immheader-0)
676               (%svref *immheader-0-array-element-types* class))
677              ((= tag x8664::fulltag-immheader-1)
678               (%svref *immheader-1-array-element-types* class))
679              ((= tag x8664::fulltag-immheader-2)
680               (%svref *immheader-2-array-element-types* class))
681              (t 'bogus)))))
682  )
683
684#+arm-target
685(progn
686  (defparameter array-element-subtypes
687    #(single-float 
688      (unsigned-byte 32)
689      (signed-byte 32)
690      fixnum
691      base-char                         ;ucs4
692      (unsigned-byte 8)
693      (signed-byte 8)
694      base-char
695      (unsigned-byte 16)
696      (signed-byte 16)
697      double-float
698      bit))
699 
700  ;; given uvector subtype - what is the corresponding element-type
701  (defun element-subtype-type (subtype)
702    (declare (fixnum subtype))
703    (if  (= subtype arm::subtag-simple-vector) t
704        (svref array-element-subtypes 
705               (ash (- subtype arm::min-cl-ivector-subtag) (- arm::ntagbits)))))
706  )
707
708
709;;; %make-displaced-array assumes the following
710
711(eval-when (:compile-toplevel)
712  (assert (eql target::arrayH.flags-cell target::vectorH.flags-cell))
713  (assert (eql target::arrayH.displacement-cell target::vectorH.displacement-cell))
714  (assert (eql target::arrayH.data-vector-cell target::vectorH.data-vector-cell)))
715
716
717(defun %make-displaced-array (dimensions displaced-to
718                                         &optional fill adjustable
719                                         offset explicitp)
720  (if offset 
721    (unless (and (fixnump offset) (>= (the fixnum offset) 0))
722      (setq offset (require-type offset '(and fixnum (integer 0 *)))))
723    (setq offset 0))
724  (locally (declare (fixnum offset))
725    (let* ((disp-size (array-total-size displaced-to))
726           (rank (if (listp dimensions)(length dimensions) 1))
727           (new-size (if (fixnump dimensions)
728                       dimensions
729                       (if (listp dimensions)
730                         (if (eql rank 1)
731                           (car dimensions)
732                           (if (eql rank 0) 1 ; why not 0?
733                           (apply #'* dimensions))))))
734           (vect-subtype (typecode displaced-to))
735           (target displaced-to)
736           (real-offset offset)
737           (flags 0))
738      (declare (fixnum disp-size rank flags vect-subtype real-offset))
739      (when explicitp
740        (setq flags (bitset $arh_exp_disp_bit flags)))
741      (if (not (fixnump new-size))(error "Bad array dimensions ~s." dimensions)) 
742      (locally (declare (fixnum new-size))
743        ; (when (> (+ offset new-size) disp-size) ...), but don't cons bignums
744        (when (or (> new-size disp-size)
745                  (let ((max-offset (- disp-size new-size)))
746                    (declare (fixnum max-offset))
747                    (> offset max-offset)))
748          (%err-disp $err-disp-size displaced-to))
749        (if adjustable  (setq flags (bitset $arh_adjp_bit flags)))
750        (when fill
751          (if (eq fill t)
752            (setq fill new-size)
753            (unless (and (eql rank 1)
754                         (fixnump fill)
755                         (locally (declare (fixnum fill))
756                           (and (>= fill 0) (<= fill new-size))))
757              (error "Bad fill pointer ~s" fill)))
758          (setq flags (bitset $arh_fill_bit flags))))
759      ; If displaced-to is an array or vector header and is either
760      ; adjustable or its target is a header, then we need to set the
761      ; $arh_disp_bit. If displaced-to is not adjustable, then our
762      ; target can be its target instead of itself.
763      (when (or (eql vect-subtype target::subtag-arrayH)
764                (eql vect-subtype target::subtag-vectorH))
765        (let ((dflags (%svref displaced-to target::arrayH.flags-cell)))
766          (declare (fixnum dflags))
767          (when (or (logbitp $arh_adjp_bit dflags)
768                    t
769                    (progn
770                      #+nope
771                      (setq target (%svref displaced-to target::arrayH.data-vector-cell)
772                            real-offset (+ offset (%svref displaced-to target::arrayH.displacement-cell)))
773                      (logbitp $arh_disp_bit dflags)
774                      #-nope t))
775            (setq flags (bitset $arh_disp_bit flags))))
776        (setq vect-subtype (%array-header-subtype displaced-to)))
777      ; assumes flags is low byte
778      (setq flags (dpb vect-subtype target::arrayH.flags-cell-subtag-byte flags))
779      (if (eq rank 1)
780        (%gvector target::subtag-vectorH 
781                      (if (fixnump fill) fill new-size)
782                      new-size
783                      target
784                      real-offset
785                      flags)
786        (let ((val (%alloc-misc (+ target::arrayh.dim0-cell rank) target::subtag-arrayH)))
787          (setf (%svref val target::arrayH.rank-cell) rank)
788          (setf (%svref val target::arrayH.physsize-cell) new-size)
789          (setf (%svref val target::arrayH.data-vector-cell) target)
790          (setf (%svref val target::arrayH.displacement-cell) real-offset)
791          (setf (%svref val target::arrayH.flags-cell) flags)
792          (do* ((dims dimensions (cdr dims))
793                (i 0 (1+ i)))             
794               ((null dims))
795            (declare (fixnum i)(list dims))
796            (setf (%svref val (%i+ target::arrayH.dim0-cell i)) (car dims)))
797          val)))))
798
799(defun make-array (dims &key (element-type t element-type-p)
800                        displaced-to
801                        displaced-index-offset
802                        adjustable
803                        fill-pointer
804                        (initial-element nil initial-element-p)
805                        (initial-contents nil initial-contents-p))
806  (when (and initial-element-p initial-contents-p)
807        (error "Cannot specify both ~S and ~S" :initial-element-p :initial-contents-p))
808  (make-array-1 dims element-type element-type-p
809                displaced-to
810                displaced-index-offset
811                adjustable
812                fill-pointer
813                initial-element initial-element-p
814                initial-contents initial-contents-p
815                nil))
816
817
818
819
820
821(defun vector-pop (vector)
822  "Decrease the fill pointer by 1 and return the element pointed to by the
823  new fill pointer."
824  (let* ((fill (fill-pointer vector)))
825    (declare (fixnum fill))
826    (if (zerop fill)
827      (error "Fill pointer of ~S is 0 ." vector)
828      (progn
829        (decf fill)
830        (%set-fill-pointer vector fill)
831        (aref vector fill)))))
832
833
834
835
836(defun elt (sequence idx)
837  "Return the element of SEQUENCE specified by INDEX."
838  (seq-dispatch
839   sequence
840   (let* ((cell (nthcdr idx sequence)))
841     (if (consp cell)
842       (car (the cons cell))
843       (if cell
844         (report-bad-arg sequence '(satisfies proper-list-p))
845         (%err-disp $XACCESSNTH idx sequence))))
846       
847   (progn
848     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
849       (report-bad-arg idx 'unsigned-byte))
850     (locally 
851       (if (>= idx (length sequence))
852         (%err-disp $XACCESSNTH idx sequence)
853         (aref sequence idx))))))
854
855
856
857
858(defun set-elt (sequence idx value)
859  (seq-dispatch
860   sequence
861   (let* ((cell (nthcdr idx sequence)))
862     (if (consp cell)
863       (setf (car (the cons cell)) value)
864       (if cell
865         (report-bad-arg sequence '(satisfies proper-list-p))
866         (%err-disp $XACCESSNTH idx sequence))))
867   (progn
868     (unless (and (typep idx 'fixnum) (>= (the fixnum idx) 0))
869       (report-bad-arg idx 'unsigned-byte))
870     (locally 
871       (declare (fixnum idx))
872       (if (>= idx (length sequence))
873         (%err-disp $XACCESSNTH idx sequence)
874         (setf (aref sequence idx) value))))))
875
876
877
878
879(%fhave 'equalp #'equal)                ; bootstrapping
880
881(defun copy-tree (tree)
882  "Recursively copy trees of conses."
883  (if (atom tree)
884    tree
885    (locally (declare (type cons tree))
886      (do* ((tail (cdr tree) (cdr tail))
887            (result (cons (copy-tree (car tree)) nil))
888            (ptr result (cdr ptr)))
889           ((atom tail)
890            (setf (cdr ptr) tail)
891            result)
892        (declare (type cons ptr result))
893        (locally 
894          (declare (type cons tail))
895          (setf (cdr ptr) (cons (copy-tree (car tail)) nil)))))))
896
897
898
899
900(defvar *periodic-task-interval* 0.3)
901(defvar *periodic-task-seconds* 0)
902(defvar *periodic-task-nanoseconds* 300000000)
903
904(defun set-periodic-task-interval (n)
905  (multiple-value-setq (*periodic-task-seconds* *periodic-task-nanoseconds*)
906    (nanoseconds n))
907  (setq *periodic-task-interval* n))
908
909(defun periodic-task-interval ()
910  *periodic-task-interval*)
911
912
913
914(defun char-downcase (c)
915  "Return CHAR converted to lower-case if that is possible."
916  (declare (optimize (speed 3))) ; open-code the %CHAR-CODE-DOWNCASE here.
917  (code-char (the valid-char-code (%char-code-downcase (char-code c)))))
918
919
920
921(defun digit-char-p (char &optional radix)
922  "If char is a digit in the specified radix, returns the fixnum for
923  which that digit stands, else returns NIL."
924  (let* ((code (char-code char))
925         (r (if radix (if (and (typep radix 'fixnum)
926                               (%i>= radix 2)
927                               (%i<= radix 36))
928                        radix
929                        (%validate-radix radix)) 10))
930         (weight (if (and (<= code (char-code #\9))
931                          (>= code (char-code #\0)))
932                   (the fixnum (- code (char-code #\0)))
933                   (if (and (<= code (char-code #\Z))
934                            (>= code (char-code #\A)))
935                     (the fixnum (+ 10 (the fixnum (- code (char-code #\A)))))
936                   (if (and (<= code (char-code #\z))
937                            (>= code (char-code #\a)))
938                     (the fixnum (+ 10 (the fixnum (- code (char-code #\a))))))))))
939    (declare (fixnum code r))
940    (and weight (< (the fixnum weight) r) weight)))
941
942
943
944
945
946
947
948(defun string-start-end (string start end)
949  (setq string (string string))
950  (let ((len (length (the string string))))
951    (flet ((are (a i)(error "Array index ~S out of bounds for ~S." i a)))   
952      (if (and end (> end len))(are string end))
953      (if (and start (or (< start 0)(> start len)))(are string start))
954      (setq start (or start 0) end (or end len))
955      (if (%i> start end)
956        (error "Start ~S exceeds end ~S." start end))
957      (if (typep string 'simple-string)
958        (values string start end)
959        (multiple-value-bind (str off)(array-data-and-offset string)
960          (values str (%i+ off start)(%i+ off end)))))))
961
962(defun get-properties (place indicator-list)
963  "Like GETF, except that INDICATOR-LIST is a list of indicators which will
964  be looked for in the property list stored in PLACE. Three values are
965  returned, see manual for details."
966  (do ((plist place (cddr plist)))
967      ((null plist) (values nil nil nil))
968    (cond ((atom (cdr plist))
969           (report-bad-arg place '(satisfies proper-list-p)))
970          ((memq (car plist) indicator-list) ;memq defined in kernel
971           (return (values (car plist) (cadr plist) plist))))))
972
973(defun string= (string1 string2 &key start1 end1 start2 end2)
974  "Given two strings (string1 and string2), and optional integers start1,
975  start2, end1 and end2, compares characters in string1 to characters in
976  string2 (using char=)."
977    (locally (declare (optimize (speed 3)(safety 0)))
978      (if (and (simple-string-p string1)(null start1)(null end1))
979        (setq start1 0 end1 (length string1))
980        (multiple-value-setq (string1 start1 end1)(string-start-end string1 start1 end1)))
981      (if (and (simple-string-p string2)(null start2)(null end2))
982        (setq start2 0 end2 (length string2))
983        (multiple-value-setq (string2 start2 end2)(string-start-end string2 start2 end2)))   
984      (%simple-string= string1 string2 start1 start2 end1 end2)))
985
986
987(defun lfun-keyvect (lfun)
988  (let ((bits (lfun-bits lfun)))
989    (declare (fixnum bits))
990    (and (logbitp $lfbits-keys-bit bits)
991         (or (logbitp $lfbits-method-bit bits)
992             (and (not (logbitp $lfbits-gfn-bit bits))
993                  (not (logbitp $lfbits-cm-bit bits))))
994         (nth-immediate lfun 1))))
995
996
997(defun function-entry-code-note (fn)
998  (let ((bits (lfun-bits (setq fn (require-type fn 'function)))))
999    (declare (fixnum bits))
1000    (and (logbitp $lfbits-code-coverage-bit bits)
1001         (loop for i upfrom 1 as imm = (nth-immediate fn i)
1002               when (code-note-p imm) do (return imm)))))
1003
1004
1005(defun function-lambda-expression (fn)
1006  "Return (VALUES DEFINING-LAMBDA-EXPRESSION CLOSURE-P NAME), where
1007  DEFINING-LAMBDA-EXPRESSION is NIL if unknown, or a suitable argument
1008  to COMPILE otherwise, CLOSURE-P is non-NIL if the function's definition
1009  might have been enclosed in some non-null lexical environment, and
1010  NAME is some name (for debugging only) or NIL if there is no name."
1011  ;(declare (values def env-p name))
1012  (let* ((bits (lfun-bits (setq fn (require-type fn 'function)))))
1013    (declare (fixnum bits))
1014    (if (logbitp $lfbits-trampoline-bit bits)
1015      (function-lambda-expression (nth-immediate fn 1))
1016      (values (uncompile-function fn)
1017              (logbitp $lfbits-nonnullenv-bit bits)
1018              (function-name fn)))))
1019
1020; env must be a lexical-environment or NIL.
1021; If env contains function or variable bindings or SPECIAL declarations, return t.
1022; Else return nil
1023(defun %non-empty-environment-p (env)
1024  (loop
1025    (when (or (null env) (istruct-typep env 'definition-environment))
1026      (return nil))
1027    (when (or (consp (lexenv.variables env))
1028              (consp (lexenv.functions env))
1029              (dolist (vdecl (lexenv.vdecls env))
1030                (when (eq (cadr vdecl) 'special)
1031                  (return t))))
1032      (return t))
1033    (setq env (lexenv.parent-env env))))
1034
1035;(coerce object 'compiled-function)
1036(defun coerce-to-compiled-function (object)
1037  (setq object (coerce-to-function object))
1038  (unless (typep object 'compiled-function)
1039    (multiple-value-bind (def envp) (function-lambda-expression object)
1040      (when (or envp (null def))
1041        (%err-disp $xcoerce object 'compiled-function))
1042      (setq object (compile-user-function def nil))))
1043  object)
1044
1045
1046
1047(defun %set-toplevel (&optional (fun nil fun-p))
1048  ;(setq fun (require-type fun '(or symbol function)))
1049  (let* ((tcr (%current-tcr)))
1050    (prog1 (%tcr-toplevel-function tcr)
1051      (when fun-p
1052        (%set-tcr-toplevel-function tcr fun)))))
1053
1054
1055(defun gccounts ()
1056  (let* ((total (%get-gc-count))
1057         (full (full-gccount))
1058         (g2-count 0)
1059         (g1-count 0)
1060         (g0-count 0))
1061    (when (egc-enabled-p)
1062      (let* ((a (%active-dynamic-area)))
1063        (setq g0-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1064        (setq g1-count (%fixnum-ref a target::area.gc-count) a (%fixnum-ref a target::area.older))
1065        (setq g2-count (%fixnum-ref a target::area.gc-count))))
1066    (values total full g2-count g1-count g0-count)))
1067
1068     
1069
1070
1071
1072(defstatic %pascal-functions%
1073    #(NIL NIL NIL NIL NIL NIL NIL NIL
1074      NIL NIL NIL NIL NIL NIL NIL NIL
1075      NIL NIL NIL NIL NIL NIL NIL NIL
1076      NIL NIL NIL NIL NIL NIL NIL NIL))
1077
1078
1079(defun gc-retain-pages (arg)
1080  "Try to influence the GC to retain/recycle the pages allocated between
1081GCs if arg is true, and to release them otherwise. This is generally a
1082gtradeoff between paging and other VM considerations."
1083  (setq *gc-event-status-bits*
1084        (if arg
1085          (bitset $gc-retain-pages-bit *gc-event-status-bits*)
1086          (bitclr $gc-retain-pages-bit *gc-event-status-bits*)))
1087  (not (null arg)))
1088
1089(defun gc-retaining-pages ()
1090  "Return T if the GC tries to retain pages between full GCs and NIL if
1091it's trying to release them to improve VM paging performance."
1092  (logbitp $gc-retain-pages-bit *gc-event-status-bits*)) 
1093
1094
1095(defun gc-verbose (on-full-gc &optional (egc-too on-full-gc))
1096  "If the first (required) argument is non-NIL, configures the GC to print
1097informational messages on entry and exit to each full GC; if the first argument
1098is 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."
1099  (let* ((bits *gc-event-status-bits*))
1100    (if on-full-gc
1101      (bitsetf $gc-verbose-bit bits)
1102      (bitclrf $gc-verbose-bit bits))
1103    (if egc-too
1104      (bitsetf $egc-verbose-bit bits)
1105      (bitclrf $egc-verbose-bit bits))
1106    (setq *gc-event-status-bits* bits)
1107    (values on-full-gc egc-too)))
1108
1109
1110(defun gc-verbose-p ()
1111  "Returns two values: the first is true if the GC is configured to
1112print messages on each full GC; the second is true if the GC is configured
1113to print messages on each ephemeral GC."
1114  (let* ((bits *gc-event-status-bits*))
1115    (values (logbitp $gc-verbose-bit bits)
1116            (logbitp $egc-verbose-bit bits))))
1117
1118(defun egc-active-p ()
1119  "Return T if the EGC was active at the time of the call, NIL otherwise.
1120Since this is generally a volatile piece of information, it's not clear
1121whether this function serves a useful purpose when native threads are
1122involved."
1123  (and (egc-enabled-p)
1124       (not (eql 0 (%get-kernel-global 'oldest-ephemeral)))))
1125
1126; this IS effectively a passive way of inquiring about enabled status.
1127(defun egc-enabled-p ()
1128  "Return T if the EGC was enabled at the time of the call, NIL otherwise."
1129  (not (eql 0 (%fixnum-ref (%active-dynamic-area) target::area.older))))
1130
1131(defun egc-configuration ()
1132  "Return as multiple values the sizes in kilobytes of the thresholds
1133associated with the youngest ephemeral generation, the middle ephemeral
1134generation, and the oldest ephemeral generation."
1135  (let* ((ta (%get-kernel-global 'tenured-area))
1136         (g2 (%fixnum-ref ta target::area.younger))
1137         (g1 (%fixnum-ref g2 target::area.younger))
1138         (g0 (%fixnum-ref g1 target::area.younger)))
1139    (values (ash (the fixnum (%fixnum-ref g0 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1140            (ash (the fixnum (%fixnum-ref g1 target::area.threshold)) (- (- 10 target::fixnum-shift)))
1141            (ash (the fixnum (%fixnum-ref g2 target::area.threshold)) (- (- 10 target::fixnum-shift))))))
1142
1143
1144(defun configure-egc (e0size e1size e2size)
1145  "If the EGC is currently disabled, put the indicated threshold sizes in
1146effect and returns T, otherwise, returns NIL.  The provided threshold sizes
1147are rounded up to a multiple of 64Kbytes."
1148  (let* ((was-enabled (egc-active-p))
1149         (e2size (require-type e2size '(unsigned-byte 18)))
1150         (e1size (require-type e1size '(unsigned-byte 18)))
1151         (e0size (require-type e0size '(integer 1 #.(ash 1 18)))))
1152    (unless (<= e0size e1size e2size)
1153      (error "Generation ~s threshold cannot be smaller than generation ~s threshold"
1154             (if (> e0size e1size) 1 2) (if (> e0size e1size) 0 1)))
1155    (unwind-protect
1156         (progn
1157           (egc nil)
1158           (setq e2size (logand (lognot #xffff) (+ #xffff (ash e2size 10)))
1159                 e1size (logand (lognot #xffff) (+ #xffff (ash e1size 10)))
1160                 e0size (logand (lognot #xffff) (+ #xffff (ash e0size 10))))
1161           (%configure-egc e0size e1size e2size))
1162      (egc was-enabled))))
1163
1164
1165
1166(defun macptr-flags (macptr)
1167  (if (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1168    0
1169    (uvref macptr TARGET::XMACPTR.FLAGS-CELL)))
1170
1171
1172; This doesn't really make the macptr be gcable (now has to be
1173; on linked list), but we might have other reasons for setting
1174; other flag bits.
1175(defun set-macptr-flags (macptr value) 
1176  (unless (eql (uvsize (setq macptr (require-type macptr 'macptr))) 1)
1177    (setf (%svref macptr TARGET::XMACPTR.FLAGS-CELL) value)
1178    value))
1179
1180(defun %new-gcable-ptr (size &optional clear-p)
1181  (let ((p (make-gcable-macptr $flags_DisposPtr)))
1182    (%setf-macptr p (malloc size))
1183    (if clear-p
1184      (#_memset p 0 size))
1185    p))
1186
1187(defun %gcable-ptr-p (p)
1188  (and (typep p 'macptr)
1189       (= (uvsize p) target::xmacptr.element-count)))
1190
1191(defstatic *upper-to-lower* nil)
1192(defstatic *lower-to-upper*  nil)
1193
1194;;; "address" should be the address (as returned by FOREIGN-SYMBOL-ADDRESS)
1195;;; of a foreign function that accepts a pointer as an argument and does
1196;;; whatever's needed to dispose of it.  That function can be called from
1197;;; the GC, so it shouldn't call back into lisp.
1198(defun register-xmacptr-dispose-function (address)
1199  (ff-call (%kernel-import target::kernel-import-register-xmacptr-dispose-function)
1200           :address address
1201           :int))
1202
1203
1204;;; This alist is automatically (and not too cleverly ...) generated.
1205;;;
1206;;; NB: it was generated from Unicode 5.0 character tables, check to
1207;;; see if anything's changed in 5.1 or later versions.
1208;;;
1209;;; The (upper . lower) pairs have the property that UPPER is the
1210;;; value "simple uppercase equivalent" entry for LOWER in the
1211;;; UnicodeData.txt file and LOWER is the corresponding entry for
1212;;; UPPER,
1213(let* ((mapping
1214        '((#\Latin_Capital_Letter_A_With_Grave . #\Latin_Small_Letter_A_With_Grave)
1215          (#\Latin_Capital_Letter_A_With_Acute . #\Latin_Small_Letter_A_With_Acute)
1216          (#\Latin_Capital_Letter_A_With_Circumflex
1217           . #\Latin_Small_Letter_A_With_Circumflex)
1218          (#\Latin_Capital_Letter_A_With_Tilde . #\Latin_Small_Letter_A_With_Tilde)
1219          (#\Latin_Capital_Letter_A_With_Diaeresis
1220           . #\Latin_Small_Letter_A_With_Diaeresis)
1221          (#\Latin_Capital_Letter_A_With_Ring_Above
1222           . #\Latin_Small_Letter_A_With_Ring_Above)
1223         
1224          (#\Latin_Capital_Letter_Ae . #\Latin_Small_Letter_Ae)
1225         
1226          (#\Latin_Capital_Letter_C_With_Cedilla . #\Latin_Small_Letter_C_With_Cedilla)
1227         
1228          (#\Latin_Capital_Letter_E_With_Grave . #\Latin_Small_Letter_E_With_Grave)
1229         
1230          (#\Latin_Capital_Letter_E_With_Acute . #\Latin_Small_Letter_E_With_Acute)
1231         
1232          (#\Latin_Capital_Letter_E_With_Circumflex
1233           . #\Latin_Small_Letter_E_With_Circumflex)
1234         
1235          (#\Latin_Capital_Letter_E_With_Diaeresis
1236           . #\Latin_Small_Letter_E_With_Diaeresis)
1237         
1238          (#\Latin_Capital_Letter_I_With_Grave . #\Latin_Small_Letter_I_With_Grave)
1239         
1240          (#\Latin_Capital_Letter_I_With_Acute . #\Latin_Small_Letter_I_With_Acute)
1241         
1242          (#\Latin_Capital_Letter_I_With_Circumflex
1243           . #\Latin_Small_Letter_I_With_Circumflex)
1244         
1245          (#\Latin_Capital_Letter_I_With_Diaeresis
1246           . #\Latin_Small_Letter_I_With_Diaeresis)
1247         
1248          (#\Latin_Capital_Letter_Eth . #\Latin_Small_Letter_Eth)
1249         
1250          (#\Latin_Capital_Letter_N_With_Tilde . #\Latin_Small_Letter_N_With_Tilde)
1251         
1252          (#\Latin_Capital_Letter_O_With_Grave . #\Latin_Small_Letter_O_With_Grave)
1253         
1254          (#\Latin_Capital_Letter_O_With_Acute . #\Latin_Small_Letter_O_With_Acute)
1255         
1256          (#\Latin_Capital_Letter_O_With_Circumflex
1257           . #\Latin_Small_Letter_O_With_Circumflex)
1258         
1259          (#\Latin_Capital_Letter_O_With_Tilde . #\Latin_Small_Letter_O_With_Tilde)
1260         
1261          (#\Latin_Capital_Letter_O_With_Diaeresis
1262           . #\Latin_Small_Letter_O_With_Diaeresis)
1263         
1264          (#\Latin_Capital_Letter_O_With_Stroke . #\Latin_Small_Letter_O_With_Stroke)
1265         
1266          (#\Latin_Capital_Letter_U_With_Grave . #\Latin_Small_Letter_U_With_Grave)
1267         
1268          (#\Latin_Capital_Letter_U_With_Acute . #\Latin_Small_Letter_U_With_Acute)
1269         
1270          (#\Latin_Capital_Letter_U_With_Circumflex
1271           . #\Latin_Small_Letter_U_With_Circumflex)
1272         
1273          (#\Latin_Capital_Letter_U_With_Diaeresis
1274           . #\Latin_Small_Letter_U_With_Diaeresis)
1275         
1276          (#\Latin_Capital_Letter_Y_With_Acute . #\Latin_Small_Letter_Y_With_Acute)
1277         
1278          (#\Latin_Capital_Letter_Thorn . #\Latin_Small_Letter_Thorn)
1279         
1280          (#\Latin_Capital_Letter_A_With_Macron . #\Latin_Small_Letter_A_With_Macron)
1281         
1282          (#\Latin_Capital_Letter_A_With_Breve . #\Latin_Small_Letter_A_With_Breve)
1283         
1284          (#\Latin_Capital_Letter_A_With_Ogonek . #\Latin_Small_Letter_A_With_Ogonek)
1285         
1286          (#\Latin_Capital_Letter_C_With_Acute . #\Latin_Small_Letter_C_With_Acute)
1287         
1288          (#\Latin_Capital_Letter_C_With_Circumflex
1289           . #\Latin_Small_Letter_C_With_Circumflex)
1290         
1291          (#\Latin_Capital_Letter_C_With_Dot_Above
1292           . #\Latin_Small_Letter_C_With_Dot_Above)
1293         
1294          (#\Latin_Capital_Letter_C_With_Caron . #\Latin_Small_Letter_C_With_Caron)
1295         
1296          (#\Latin_Capital_Letter_D_With_Caron . #\Latin_Small_Letter_D_With_Caron)
1297         
1298          (#\Latin_Capital_Letter_D_With_Stroke . #\Latin_Small_Letter_D_With_Stroke)
1299         
1300          (#\Latin_Capital_Letter_E_With_Macron . #\Latin_Small_Letter_E_With_Macron)
1301         
1302          (#\Latin_Capital_Letter_E_With_Breve . #\Latin_Small_Letter_E_With_Breve)
1303         
1304          (#\Latin_Capital_Letter_E_With_Dot_Above
1305           . #\Latin_Small_Letter_E_With_Dot_Above)
1306         
1307          (#\Latin_Capital_Letter_E_With_Ogonek . #\Latin_Small_Letter_E_With_Ogonek)
1308         
1309          (#\Latin_Capital_Letter_E_With_Caron . #\Latin_Small_Letter_E_With_Caron)
1310         
1311          (#\Latin_Capital_Letter_G_With_Circumflex
1312           . #\Latin_Small_Letter_G_With_Circumflex)
1313         
1314          (#\Latin_Capital_Letter_G_With_Breve . #\Latin_Small_Letter_G_With_Breve)
1315         
1316          (#\Latin_Capital_Letter_G_With_Dot_Above
1317           . #\Latin_Small_Letter_G_With_Dot_Above)
1318         
1319          (#\Latin_Capital_Letter_G_With_Cedilla . #\Latin_Small_Letter_G_With_Cedilla)
1320         
1321          (#\Latin_Capital_Letter_H_With_Circumflex
1322           . #\Latin_Small_Letter_H_With_Circumflex)
1323         
1324          (#\Latin_Capital_Letter_H_With_Stroke . #\Latin_Small_Letter_H_With_Stroke)
1325         
1326          (#\Latin_Capital_Letter_I_With_Tilde . #\Latin_Small_Letter_I_With_Tilde)
1327         
1328          (#\Latin_Capital_Letter_I_With_Macron . #\Latin_Small_Letter_I_With_Macron)
1329         
1330          (#\Latin_Capital_Letter_I_With_Breve . #\Latin_Small_Letter_I_With_Breve)
1331         
1332          (#\Latin_Capital_Letter_I_With_Ogonek . #\Latin_Small_Letter_I_With_Ogonek)
1333         
1334          (#\Latin_Capital_Ligature_Ij . #\Latin_Small_Ligature_Ij)
1335         
1336          (#\Latin_Capital_Letter_J_With_Circumflex
1337           . #\Latin_Small_Letter_J_With_Circumflex)
1338         
1339          (#\Latin_Capital_Letter_K_With_Cedilla . #\Latin_Small_Letter_K_With_Cedilla)
1340         
1341          (#\Latin_Capital_Letter_L_With_Acute . #\Latin_Small_Letter_L_With_Acute)
1342         
1343          (#\Latin_Capital_Letter_L_With_Cedilla . #\Latin_Small_Letter_L_With_Cedilla)
1344         
1345          (#\Latin_Capital_Letter_L_With_Caron . #\Latin_Small_Letter_L_With_Caron)
1346         
1347          (#\Latin_Capital_Letter_L_With_Middle_Dot
1348           . #\Latin_Small_Letter_L_With_Middle_Dot)
1349         
1350          (#\Latin_Capital_Letter_L_With_Stroke . #\Latin_Small_Letter_L_With_Stroke)
1351         
1352          (#\Latin_Capital_Letter_N_With_Acute . #\Latin_Small_Letter_N_With_Acute)
1353         
1354          (#\Latin_Capital_Letter_N_With_Cedilla . #\Latin_Small_Letter_N_With_Cedilla)
1355         
1356          (#\Latin_Capital_Letter_N_With_Caron . #\Latin_Small_Letter_N_With_Caron)
1357         
1358          (#\Latin_Capital_Letter_Eng . #\Latin_Small_Letter_Eng)
1359         
1360          (#\Latin_Capital_Letter_O_With_Macron . #\Latin_Small_Letter_O_With_Macron)
1361         
1362          (#\Latin_Capital_Letter_O_With_Breve . #\Latin_Small_Letter_O_With_Breve)
1363         
1364          (#\Latin_Capital_Letter_O_With_Double_Acute
1365           . #\Latin_Small_Letter_O_With_Double_Acute)
1366         
1367          (#\Latin_Capital_Ligature_Oe . #\Latin_Small_Ligature_Oe)
1368         
1369          (#\Latin_Capital_Letter_R_With_Acute . #\Latin_Small_Letter_R_With_Acute)
1370         
1371          (#\Latin_Capital_Letter_R_With_Cedilla . #\Latin_Small_Letter_R_With_Cedilla)
1372         
1373          (#\Latin_Capital_Letter_R_With_Caron . #\Latin_Small_Letter_R_With_Caron)
1374         
1375          (#\Latin_Capital_Letter_S_With_Acute . #\Latin_Small_Letter_S_With_Acute)
1376         
1377          (#\Latin_Capital_Letter_S_With_Circumflex
1378           . #\Latin_Small_Letter_S_With_Circumflex)
1379         
1380          (#\Latin_Capital_Letter_S_With_Cedilla . #\Latin_Small_Letter_S_With_Cedilla)
1381         
1382          (#\Latin_Capital_Letter_S_With_Caron . #\Latin_Small_Letter_S_With_Caron)
1383         
1384          (#\Latin_Capital_Letter_T_With_Cedilla . #\Latin_Small_Letter_T_With_Cedilla)
1385         
1386          (#\Latin_Capital_Letter_T_With_Caron . #\Latin_Small_Letter_T_With_Caron)
1387         
1388          (#\Latin_Capital_Letter_T_With_Stroke . #\Latin_Small_Letter_T_With_Stroke)
1389         
1390          (#\Latin_Capital_Letter_U_With_Tilde . #\Latin_Small_Letter_U_With_Tilde)
1391         
1392          (#\Latin_Capital_Letter_U_With_Macron . #\Latin_Small_Letter_U_With_Macron)
1393         
1394          (#\Latin_Capital_Letter_U_With_Breve . #\Latin_Small_Letter_U_With_Breve)
1395         
1396          (#\Latin_Capital_Letter_U_With_Ring_Above
1397           . #\Latin_Small_Letter_U_With_Ring_Above)
1398         
1399          (#\Latin_Capital_Letter_U_With_Double_Acute
1400           . #\Latin_Small_Letter_U_With_Double_Acute)
1401         
1402          (#\Latin_Capital_Letter_U_With_Ogonek . #\Latin_Small_Letter_U_With_Ogonek)
1403         
1404          (#\Latin_Capital_Letter_W_With_Circumflex
1405           . #\Latin_Small_Letter_W_With_Circumflex)
1406         
1407          (#\Latin_Capital_Letter_Y_With_Circumflex
1408           . #\Latin_Small_Letter_Y_With_Circumflex)
1409         
1410          (#\Latin_Capital_Letter_Y_With_Diaeresis
1411           . #\Latin_Small_Letter_Y_With_Diaeresis)
1412         
1413          (#\Latin_Capital_Letter_Z_With_Acute . #\Latin_Small_Letter_Z_With_Acute)
1414         
1415          (#\Latin_Capital_Letter_Z_With_Dot_Above
1416           . #\Latin_Small_Letter_Z_With_Dot_Above)
1417         
1418          (#\Latin_Capital_Letter_Z_With_Caron . #\Latin_Small_Letter_Z_With_Caron)
1419         
1420          (#\Latin_Capital_Letter_B_With_Hook . #\Latin_Small_Letter_B_With_Hook)
1421         
1422          (#\Latin_Capital_Letter_B_With_Topbar . #\Latin_Small_Letter_B_With_Topbar)
1423         
1424          (#\Latin_Capital_Letter_Tone_Six . #\Latin_Small_Letter_Tone_Six)
1425         
1426          (#\Latin_Capital_Letter_Open_O . #\Latin_Small_Letter_Open_O)
1427         
1428          (#\Latin_Capital_Letter_C_With_Hook . #\Latin_Small_Letter_C_With_Hook)
1429         
1430          (#\Latin_Capital_Letter_African_D . #\Latin_Small_Letter_D_With_Tail)
1431         
1432          (#\Latin_Capital_Letter_D_With_Hook . #\Latin_Small_Letter_D_With_Hook)
1433         
1434          (#\Latin_Capital_Letter_D_With_Topbar . #\Latin_Small_Letter_D_With_Topbar)
1435         
1436          (#\Latin_Capital_Letter_Reversed_E . #\Latin_Small_Letter_Turned_E)
1437         
1438          (#\Latin_Capital_Letter_Schwa . #\Latin_Small_Letter_Schwa)
1439         
1440          (#\Latin_Capital_Letter_Open_E . #\Latin_Small_Letter_Open_E)
1441         
1442          (#\Latin_Capital_Letter_F_With_Hook . #\Latin_Small_Letter_F_With_Hook)
1443         
1444          (#\Latin_Capital_Letter_G_With_Hook . #\Latin_Small_Letter_G_With_Hook)
1445         
1446          (#\Latin_Capital_Letter_Gamma . #\Latin_Small_Letter_Gamma)
1447         
1448          (#\Latin_Capital_Letter_Iota . #\Latin_Small_Letter_Iota)
1449         
1450          (#\Latin_Capital_Letter_I_With_Stroke . #\Latin_Small_Letter_I_With_Stroke)
1451         
1452          (#\Latin_Capital_Letter_K_With_Hook . #\Latin_Small_Letter_K_With_Hook)
1453         
1454          (#\Latin_Capital_Letter_Turned_M . #\Latin_Small_Letter_Turned_M)
1455         
1456          (#\Latin_Capital_Letter_N_With_Left_Hook
1457           . #\Latin_Small_Letter_N_With_Left_Hook)
1458         
1459          (#\Latin_Capital_Letter_O_With_Middle_Tilde . #\Latin_Small_Letter_Barred_O)
1460         
1461          (#\Latin_Capital_Letter_O_With_Horn . #\Latin_Small_Letter_O_With_Horn)
1462         
1463          (#\Latin_Capital_Letter_Oi . #\Latin_Small_Letter_Oi)
1464         
1465          (#\Latin_Capital_Letter_P_With_Hook . #\Latin_Small_Letter_P_With_Hook)
1466         
1467          (#\Latin_Letter_Yr . #\Latin_Letter_Small_Capital_R)
1468         
1469          (#\Latin_Capital_Letter_Tone_Two . #\Latin_Small_Letter_Tone_Two)
1470         
1471          (#\Latin_Capital_Letter_Esh . #\Latin_Small_Letter_Esh)
1472         
1473          (#\Latin_Capital_Letter_T_With_Hook . #\Latin_Small_Letter_T_With_Hook)
1474         
1475          (#\Latin_Capital_Letter_T_With_Retroflex_Hook
1476           . #\Latin_Small_Letter_T_With_Retroflex_Hook)
1477         
1478          (#\Latin_Capital_Letter_U_With_Horn . #\Latin_Small_Letter_U_With_Horn)
1479         
1480          (#\Latin_Capital_Letter_Upsilon . #\Latin_Small_Letter_Upsilon)
1481         
1482          (#\Latin_Capital_Letter_V_With_Hook . #\Latin_Small_Letter_V_With_Hook)
1483         
1484          (#\Latin_Capital_Letter_Y_With_Hook . #\Latin_Small_Letter_Y_With_Hook)
1485         
1486          (#\Latin_Capital_Letter_Z_With_Stroke . #\Latin_Small_Letter_Z_With_Stroke)
1487         
1488          (#\Latin_Capital_Letter_Ezh . #\Latin_Small_Letter_Ezh)
1489         
1490          (#\Latin_Capital_Letter_Ezh_Reversed . #\Latin_Small_Letter_Ezh_Reversed)
1491         
1492          (#\Latin_Capital_Letter_Tone_Five . #\Latin_Small_Letter_Tone_Five)
1493         
1494          (#\Latin_Capital_Letter_Dz_With_Caron . #\Latin_Small_Letter_Dz_With_Caron)
1495         
1496          (#\Latin_Capital_Letter_Lj . #\Latin_Small_Letter_Lj)
1497         
1498          (#\Latin_Capital_Letter_Nj . #\Latin_Small_Letter_Nj)
1499         
1500          (#\Latin_Capital_Letter_A_With_Caron . #\Latin_Small_Letter_A_With_Caron)
1501         
1502          (#\Latin_Capital_Letter_I_With_Caron . #\Latin_Small_Letter_I_With_Caron)
1503         
1504          (#\Latin_Capital_Letter_O_With_Caron . #\Latin_Small_Letter_O_With_Caron)
1505         
1506          (#\Latin_Capital_Letter_U_With_Caron . #\Latin_Small_Letter_U_With_Caron)
1507         
1508          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Macron
1509           . #\Latin_Small_Letter_U_With_Diaeresis_And_Macron)
1510         
1511          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Acute
1512           . #\Latin_Small_Letter_U_With_Diaeresis_And_Acute)
1513         
1514          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Caron
1515           . #\Latin_Small_Letter_U_With_Diaeresis_And_Caron)
1516         
1517          (#\Latin_Capital_Letter_U_With_Diaeresis_And_Grave
1518           . #\Latin_Small_Letter_U_With_Diaeresis_And_Grave)
1519         
1520          (#\Latin_Capital_Letter_A_With_Diaeresis_And_Macron
1521           . #\Latin_Small_Letter_A_With_Diaeresis_And_Macron)
1522         
1523          (#\Latin_Capital_Letter_A_With_Dot_Above_And_Macron
1524           . #\Latin_Small_Letter_A_With_Dot_Above_And_Macron)
1525         
1526          (#\Latin_Capital_Letter_Ae_With_Macron . #\Latin_Small_Letter_Ae_With_Macron)
1527         
1528          (#\Latin_Capital_Letter_G_With_Stroke . #\Latin_Small_Letter_G_With_Stroke)
1529         
1530          (#\Latin_Capital_Letter_G_With_Caron . #\Latin_Small_Letter_G_With_Caron)
1531         
1532          (#\Latin_Capital_Letter_K_With_Caron . #\Latin_Small_Letter_K_With_Caron)
1533         
1534          (#\Latin_Capital_Letter_O_With_Ogonek . #\Latin_Small_Letter_O_With_Ogonek)
1535         
1536          (#\Latin_Capital_Letter_O_With_Ogonek_And_Macron
1537           . #\Latin_Small_Letter_O_With_Ogonek_And_Macron)
1538         
1539          (#\Latin_Capital_Letter_Ezh_With_Caron . #\Latin_Small_Letter_Ezh_With_Caron)
1540         
1541          (#\Latin_Capital_Letter_Dz . #\Latin_Small_Letter_Dz)
1542         
1543          (#\Latin_Capital_Letter_G_With_Acute . #\Latin_Small_Letter_G_With_Acute)
1544         
1545          (#\Latin_Capital_Letter_Hwair . #\Latin_Small_Letter_Hv)
1546         
1547          (#\Latin_Capital_Letter_Wynn . #\Latin_Letter_Wynn)
1548         
1549          (#\Latin_Capital_Letter_N_With_Grave . #\Latin_Small_Letter_N_With_Grave)
1550         
1551          (#\Latin_Capital_Letter_A_With_Ring_Above_And_Acute
1552           . #\Latin_Small_Letter_A_With_Ring_Above_And_Acute)
1553         
1554          (#\Latin_Capital_Letter_Ae_With_Acute . #\Latin_Small_Letter_Ae_With_Acute)
1555         
1556          (#\Latin_Capital_Letter_O_With_Stroke_And_Acute
1557           . #\Latin_Small_Letter_O_With_Stroke_And_Acute)
1558         
1559          (#\Latin_Capital_Letter_A_With_Double_Grave
1560           . #\Latin_Small_Letter_A_With_Double_Grave)
1561         
1562          (#\Latin_Capital_Letter_A_With_Inverted_Breve
1563           . #\Latin_Small_Letter_A_With_Inverted_Breve)
1564         
1565          (#\Latin_Capital_Letter_E_With_Double_Grave
1566           . #\Latin_Small_Letter_E_With_Double_Grave)
1567         
1568          (#\Latin_Capital_Letter_E_With_Inverted_Breve
1569           . #\Latin_Small_Letter_E_With_Inverted_Breve)
1570         
1571          (#\Latin_Capital_Letter_I_With_Double_Grave
1572           . #\Latin_Small_Letter_I_With_Double_Grave)
1573         
1574          (#\Latin_Capital_Letter_I_With_Inverted_Breve
1575           . #\Latin_Small_Letter_I_With_Inverted_Breve)
1576         
1577          (#\Latin_Capital_Letter_O_With_Double_Grave
1578           . #\Latin_Small_Letter_O_With_Double_Grave)
1579         
1580          (#\Latin_Capital_Letter_O_With_Inverted_Breve
1581           . #\Latin_Small_Letter_O_With_Inverted_Breve)
1582         
1583          (#\Latin_Capital_Letter_R_With_Double_Grave
1584           . #\Latin_Small_Letter_R_With_Double_Grave)
1585         
1586          (#\Latin_Capital_Letter_R_With_Inverted_Breve
1587           . #\Latin_Small_Letter_R_With_Inverted_Breve)
1588         
1589          (#\Latin_Capital_Letter_U_With_Double_Grave
1590           . #\Latin_Small_Letter_U_With_Double_Grave)
1591         
1592          (#\Latin_Capital_Letter_U_With_Inverted_Breve
1593           . #\Latin_Small_Letter_U_With_Inverted_Breve)
1594         
1595          (#\Latin_Capital_Letter_S_With_Comma_Below
1596           . #\Latin_Small_Letter_S_With_Comma_Below)
1597         
1598          (#\Latin_Capital_Letter_T_With_Comma_Below
1599           . #\Latin_Small_Letter_T_With_Comma_Below)
1600         
1601          (#\Latin_Capital_Letter_Yogh . #\Latin_Small_Letter_Yogh)
1602         
1603          (#\Latin_Capital_Letter_H_With_Caron . #\Latin_Small_Letter_H_With_Caron)
1604         
1605          (#\Latin_Capital_Letter_N_With_Long_Right_Leg
1606           . #\Latin_Small_Letter_N_With_Long_Right_Leg)
1607         
1608          (#\Latin_Capital_Letter_Ou . #\Latin_Small_Letter_Ou)
1609         
1610          (#\Latin_Capital_Letter_Z_With_Hook . #\Latin_Small_Letter_Z_With_Hook)
1611         
1612          (#\Latin_Capital_Letter_A_With_Dot_Above
1613           . #\Latin_Small_Letter_A_With_Dot_Above)
1614         
1615          (#\Latin_Capital_Letter_E_With_Cedilla . #\Latin_Small_Letter_E_With_Cedilla)
1616         
1617          (#\Latin_Capital_Letter_O_With_Diaeresis_And_Macron
1618           . #\Latin_Small_Letter_O_With_Diaeresis_And_Macron)
1619         
1620          (#\Latin_Capital_Letter_O_With_Tilde_And_Macron
1621           . #\Latin_Small_Letter_O_With_Tilde_And_Macron)
1622         
1623          (#\Latin_Capital_Letter_O_With_Dot_Above
1624           . #\Latin_Small_Letter_O_With_Dot_Above)
1625         
1626          (#\Latin_Capital_Letter_O_With_Dot_Above_And_Macron
1627           . #\Latin_Small_Letter_O_With_Dot_Above_And_Macron)
1628         
1629          (#\Latin_Capital_Letter_Y_With_Macron . #\Latin_Small_Letter_Y_With_Macron)
1630         
1631          (#\Latin_Capital_Letter_A_With_Stroke . #\U+2C65)
1632         
1633          (#\Latin_Capital_Letter_C_With_Stroke . #\Latin_Small_Letter_C_With_Stroke)
1634         
1635          (#\Latin_Capital_Letter_L_With_Bar . #\Latin_Small_Letter_L_With_Bar)
1636         
1637          (#\Latin_Capital_Letter_T_With_Diagonal_Stroke . #\U+2C66)
1638         
1639          (#\Latin_Capital_Letter_Glottal_Stop . #\Latin_Small_Letter_Glottal_Stop)
1640         
1641          (#\Latin_Capital_Letter_B_With_Stroke . #\Latin_Small_Letter_B_With_Stroke)
1642         
1643          (#\Latin_Capital_Letter_U_Bar . #\Latin_Small_Letter_U_Bar)
1644         
1645          (#\Latin_Capital_Letter_Turned_V . #\Latin_Small_Letter_Turned_V)
1646         
1647          (#\Latin_Capital_Letter_E_With_Stroke . #\Latin_Small_Letter_E_With_Stroke)
1648         
1649          (#\Latin_Capital_Letter_J_With_Stroke . #\Latin_Small_Letter_J_With_Stroke)
1650         
1651          (#\Latin_Capital_Letter_Small_Q_With_Hook_Tail
1652           . #\Latin_Small_Letter_Q_With_Hook_Tail)
1653         
1654          (#\Latin_Capital_Letter_R_With_Stroke . #\Latin_Small_Letter_R_With_Stroke)
1655         
1656          (#\Latin_Capital_Letter_Y_With_Stroke . #\Latin_Small_Letter_Y_With_Stroke)
1657         
1658          (#\Greek_Capital_Letter_Alpha_With_Tonos
1659           . #\Greek_Small_Letter_Alpha_With_Tonos)
1660         
1661          (#\Greek_Capital_Letter_Epsilon_With_Tonos
1662           . #\Greek_Small_Letter_Epsilon_With_Tonos)
1663         
1664          (#\Greek_Capital_Letter_Eta_With_Tonos . #\Greek_Small_Letter_Eta_With_Tonos)
1665         
1666          (#\Greek_Capital_Letter_Iota_With_Tonos
1667           . #\Greek_Small_Letter_Iota_With_Tonos)
1668         
1669          (#\Greek_Capital_Letter_Omicron_With_Tonos
1670           . #\Greek_Small_Letter_Omicron_With_Tonos)
1671         
1672          (#\Greek_Capital_Letter_Upsilon_With_Tonos
1673           . #\Greek_Small_Letter_Upsilon_With_Tonos)
1674         
1675          (#\Greek_Capital_Letter_Omega_With_Tonos
1676           . #\Greek_Small_Letter_Omega_With_Tonos)
1677         
1678          (#\Greek_Capital_Letter_Alpha . #\Greek_Small_Letter_Alpha)
1679         
1680          (#\Greek_Capital_Letter_Beta . #\Greek_Small_Letter_Beta)
1681         
1682          (#\Greek_Capital_Letter_Gamma . #\Greek_Small_Letter_Gamma)
1683         
1684          (#\Greek_Capital_Letter_Delta . #\Greek_Small_Letter_Delta)
1685         
1686          (#\Greek_Capital_Letter_Epsilon . #\Greek_Small_Letter_Epsilon)
1687         
1688          (#\Greek_Capital_Letter_Zeta . #\Greek_Small_Letter_Zeta)
1689         
1690          (#\Greek_Capital_Letter_Eta . #\Greek_Small_Letter_Eta)
1691         
1692          (#\Greek_Capital_Letter_Theta . #\Greek_Small_Letter_Theta)
1693         
1694          (#\Greek_Capital_Letter_Iota . #\Greek_Small_Letter_Iota)
1695         
1696          (#\Greek_Capital_Letter_Kappa . #\Greek_Small_Letter_Kappa)
1697         
1698          (#\Greek_Capital_Letter_Lamda . #\Greek_Small_Letter_Lamda)
1699         
1700          (#\Greek_Capital_Letter_Mu . #\Greek_Small_Letter_Mu)
1701         
1702          (#\Greek_Capital_Letter_Nu . #\Greek_Small_Letter_Nu)
1703         
1704          (#\Greek_Capital_Letter_Xi . #\Greek_Small_Letter_Xi)
1705         
1706          (#\Greek_Capital_Letter_Omicron . #\Greek_Small_Letter_Omicron)
1707         
1708          (#\Greek_Capital_Letter_Pi . #\Greek_Small_Letter_Pi)
1709         
1710          (#\Greek_Capital_Letter_Rho . #\Greek_Small_Letter_Rho)
1711         
1712          (#\Greek_Capital_Letter_Sigma . #\Greek_Small_Letter_Sigma)
1713         
1714          (#\Greek_Capital_Letter_Tau . #\Greek_Small_Letter_Tau)
1715         
1716          (#\Greek_Capital_Letter_Upsilon . #\Greek_Small_Letter_Upsilon)
1717         
1718          (#\Greek_Capital_Letter_Phi . #\Greek_Small_Letter_Phi)
1719         
1720          (#\Greek_Capital_Letter_Chi . #\Greek_Small_Letter_Chi)
1721         
1722          (#\Greek_Capital_Letter_Psi . #\Greek_Small_Letter_Psi)
1723         
1724          (#\Greek_Capital_Letter_Omega . #\Greek_Small_Letter_Omega)
1725         
1726          (#\Greek_Capital_Letter_Iota_With_Dialytika
1727           . #\Greek_Small_Letter_Iota_With_Dialytika)
1728         
1729          (#\Greek_Capital_Letter_Upsilon_With_Dialytika
1730           . #\Greek_Small_Letter_Upsilon_With_Dialytika)
1731         
1732          (#\Greek_Letter_Archaic_Koppa . #\Greek_Small_Letter_Archaic_Koppa)
1733         
1734          (#\Greek_Letter_Stigma . #\Greek_Small_Letter_Stigma)
1735         
1736          (#\Greek_Letter_Digamma . #\Greek_Small_Letter_Digamma)
1737         
1738          (#\Greek_Letter_Koppa . #\Greek_Small_Letter_Koppa)
1739         
1740          (#\Greek_Letter_Sampi . #\Greek_Small_Letter_Sampi)
1741         
1742          (#\Coptic_Capital_Letter_Shei . #\Coptic_Small_Letter_Shei)
1743         
1744          (#\Coptic_Capital_Letter_Fei . #\Coptic_Small_Letter_Fei)
1745         
1746          (#\Coptic_Capital_Letter_Khei . #\Coptic_Small_Letter_Khei)
1747         
1748          (#\Coptic_Capital_Letter_Hori . #\Coptic_Small_Letter_Hori)
1749         
1750          (#\Coptic_Capital_Letter_Gangia . #\Coptic_Small_Letter_Gangia)
1751         
1752          (#\Coptic_Capital_Letter_Shima . #\Coptic_Small_Letter_Shima)
1753         
1754          (#\Coptic_Capital_Letter_Dei . #\Coptic_Small_Letter_Dei)
1755         
1756          (#\Greek_Capital_Letter_Sho . #\Greek_Small_Letter_Sho)
1757         
1758          (#\Greek_Capital_Lunate_Sigma_Symbol . #\Greek_Lunate_Sigma_Symbol)
1759         
1760          (#\Greek_Capital_Letter_San . #\Greek_Small_Letter_San)
1761         
1762          (#\Greek_Capital_Reversed_Lunate_Sigma_Symbol
1763           . #\Greek_Small_Reversed_Lunate_Sigma_Symbol)
1764         
1765          (#\Greek_Capital_Dotted_Lunate_Sigma_Symbol
1766           . #\Greek_Small_Dotted_Lunate_Sigma_Symbol)
1767         
1768          (#\Greek_Capital_Reversed_Dotted_Lunate_Sigma_Symbol
1769           . #\Greek_Small_Reversed_Dotted_Lunate_Sigma_Symbol)
1770         
1771          (#\Cyrillic_Capital_Letter_Ie_With_Grave
1772           . #\Cyrillic_Small_Letter_Ie_With_Grave)
1773         
1774          (#\Cyrillic_Capital_Letter_Io . #\Cyrillic_Small_Letter_Io)
1775         
1776          (#\Cyrillic_Capital_Letter_Dje . #\Cyrillic_Small_Letter_Dje)
1777         
1778          (#\Cyrillic_Capital_Letter_Gje . #\Cyrillic_Small_Letter_Gje)
1779         
1780          (#\Cyrillic_Capital_Letter_Ukrainian_Ie
1781           . #\Cyrillic_Small_Letter_Ukrainian_Ie)
1782         
1783          (#\Cyrillic_Capital_Letter_Dze . #\Cyrillic_Small_Letter_Dze)
1784         
1785          (#\Cyrillic_Capital_Letter_Byelorussian-Ukrainian_I
1786           . #\Cyrillic_Small_Letter_Byelorussian-Ukrainian_I)
1787         
1788          (#\Cyrillic_Capital_Letter_Yi . #\Cyrillic_Small_Letter_Yi)
1789         
1790          (#\Cyrillic_Capital_Letter_Je . #\Cyrillic_Small_Letter_Je)
1791         
1792          (#\Cyrillic_Capital_Letter_Lje . #\Cyrillic_Small_Letter_Lje)
1793         
1794          (#\Cyrillic_Capital_Letter_Nje . #\Cyrillic_Small_Letter_Nje)
1795         
1796          (#\Cyrillic_Capital_Letter_Tshe . #\Cyrillic_Small_Letter_Tshe)
1797         
1798          (#\Cyrillic_Capital_Letter_Kje . #\Cyrillic_Small_Letter_Kje)
1799         
1800          (#\Cyrillic_Capital_Letter_I_With_Grave
1801           . #\Cyrillic_Small_Letter_I_With_Grave)
1802         
1803          (#\Cyrillic_Capital_Letter_Short_U . #\Cyrillic_Small_Letter_Short_U)
1804         
1805          (#\Cyrillic_Capital_Letter_Dzhe . #\Cyrillic_Small_Letter_Dzhe)
1806         
1807          (#\Cyrillic_Capital_Letter_A . #\Cyrillic_Small_Letter_A)
1808         
1809          (#\Cyrillic_Capital_Letter_Be . #\Cyrillic_Small_Letter_Be)
1810         
1811          (#\Cyrillic_Capital_Letter_Ve . #\Cyrillic_Small_Letter_Ve)
1812         
1813          (#\Cyrillic_Capital_Letter_Ghe . #\Cyrillic_Small_Letter_Ghe)
1814         
1815          (#\Cyrillic_Capital_Letter_De . #\Cyrillic_Small_Letter_De)
1816         
1817          (#\Cyrillic_Capital_Letter_Ie . #\Cyrillic_Small_Letter_Ie)
1818         
1819          (#\Cyrillic_Capital_Letter_Zhe . #\Cyrillic_Small_Letter_Zhe)
1820         
1821          (#\Cyrillic_Capital_Letter_Ze . #\Cyrillic_Small_Letter_Ze)
1822         
1823          (#\Cyrillic_Capital_Letter_I . #\Cyrillic_Small_Letter_I)
1824         
1825          (#\Cyrillic_Capital_Letter_Short_I . #\Cyrillic_Small_Letter_Short_I)
1826         
1827          (#\Cyrillic_Capital_Letter_Ka . #\Cyrillic_Small_Letter_Ka)
1828         
1829          (#\Cyrillic_Capital_Letter_El . #\Cyrillic_Small_Letter_El)
1830         
1831          (#\Cyrillic_Capital_Letter_Em . #\Cyrillic_Small_Letter_Em)
1832         
1833          (#\Cyrillic_Capital_Letter_En . #\Cyrillic_Small_Letter_En)
1834         
1835          (#\Cyrillic_Capital_Letter_O . #\Cyrillic_Small_Letter_O)
1836         
1837          (#\Cyrillic_Capital_Letter_Pe . #\Cyrillic_Small_Letter_Pe)
1838         
1839          (#\Cyrillic_Capital_Letter_Er . #\Cyrillic_Small_Letter_Er)
1840         
1841          (#\Cyrillic_Capital_Letter_Es . #\Cyrillic_Small_Letter_Es)
1842         
1843          (#\Cyrillic_Capital_Letter_Te . #\Cyrillic_Small_Letter_Te)
1844         
1845          (#\Cyrillic_Capital_Letter_U . #\Cyrillic_Small_Letter_U)
1846         
1847          (#\Cyrillic_Capital_Letter_Ef . #\Cyrillic_Small_Letter_Ef)
1848         
1849          (#\Cyrillic_Capital_Letter_Ha . #\Cyrillic_Small_Letter_Ha)
1850         
1851          (#\Cyrillic_Capital_Letter_Tse . #\Cyrillic_Small_Letter_Tse)
1852         
1853          (#\Cyrillic_Capital_Letter_Che . #\Cyrillic_Small_Letter_Che)
1854         
1855          (#\Cyrillic_Capital_Letter_Sha . #\Cyrillic_Small_Letter_Sha)
1856         
1857          (#\Cyrillic_Capital_Letter_Shcha . #\Cyrillic_Small_Letter_Shcha)
1858         
1859          (#\Cyrillic_Capital_Letter_Hard_Sign . #\Cyrillic_Small_Letter_Hard_Sign)
1860         
1861          (#\Cyrillic_Capital_Letter_Yeru . #\Cyrillic_Small_Letter_Yeru)
1862         
1863          (#\Cyrillic_Capital_Letter_Soft_Sign . #\Cyrillic_Small_Letter_Soft_Sign)
1864         
1865          (#\Cyrillic_Capital_Letter_E . #\Cyrillic_Small_Letter_E)
1866         
1867          (#\Cyrillic_Capital_Letter_Yu . #\Cyrillic_Small_Letter_Yu)
1868         
1869          (#\Cyrillic_Capital_Letter_Ya . #\Cyrillic_Small_Letter_Ya)
1870         
1871          (#\Cyrillic_Capital_Letter_Omega . #\Cyrillic_Small_Letter_Omega)
1872         
1873          (#\Cyrillic_Capital_Letter_Yat . #\Cyrillic_Small_Letter_Yat)
1874         
1875          (#\Cyrillic_Capital_Letter_Iotified_E . #\Cyrillic_Small_Letter_Iotified_E)
1876         
1877          (#\Cyrillic_Capital_Letter_Little_Yus . #\Cyrillic_Small_Letter_Little_Yus)
1878         
1879          (#\Cyrillic_Capital_Letter_Iotified_Little_Yus
1880           . #\Cyrillic_Small_Letter_Iotified_Little_Yus)
1881         
1882          (#\Cyrillic_Capital_Letter_Big_Yus . #\Cyrillic_Small_Letter_Big_Yus)
1883         
1884          (#\Cyrillic_Capital_Letter_Iotified_Big_Yus
1885           . #\Cyrillic_Small_Letter_Iotified_Big_Yus)
1886         
1887          (#\Cyrillic_Capital_Letter_Ksi . #\Cyrillic_Small_Letter_Ksi)
1888         
1889          (#\Cyrillic_Capital_Letter_Psi . #\Cyrillic_Small_Letter_Psi)
1890         
1891          (#\Cyrillic_Capital_Letter_Fita . #\Cyrillic_Small_Letter_Fita)
1892         
1893          (#\Cyrillic_Capital_Letter_Izhitsa . #\Cyrillic_Small_Letter_Izhitsa)
1894         
1895          (#\Cyrillic_Capital_Letter_Izhitsa_With_Double_Grave_Accent
1896           . #\Cyrillic_Small_Letter_Izhitsa_With_Double_Grave_Accent)
1897         
1898          (#\Cyrillic_Capital_Letter_Uk . #\Cyrillic_Small_Letter_Uk)
1899         
1900          (#\Cyrillic_Capital_Letter_Round_Omega . #\Cyrillic_Small_Letter_Round_Omega)
1901         
1902          (#\Cyrillic_Capital_Letter_Omega_With_Titlo
1903           . #\Cyrillic_Small_Letter_Omega_With_Titlo)
1904         
1905          (#\Cyrillic_Capital_Letter_Ot . #\Cyrillic_Small_Letter_Ot)
1906         
1907          (#\Cyrillic_Capital_Letter_Koppa . #\Cyrillic_Small_Letter_Koppa)
1908         
1909          (#\Cyrillic_Capital_Letter_Short_I_With_Tail
1910           . #\Cyrillic_Small_Letter_Short_I_With_Tail)
1911         
1912          (#\Cyrillic_Capital_Letter_Semisoft_Sign
1913           . #\Cyrillic_Small_Letter_Semisoft_Sign)
1914         
1915          (#\Cyrillic_Capital_Letter_Er_With_Tick
1916           . #\Cyrillic_Small_Letter_Er_With_Tick)
1917         
1918          (#\Cyrillic_Capital_Letter_Ghe_With_Upturn
1919           . #\Cyrillic_Small_Letter_Ghe_With_Upturn)
1920         
1921          (#\Cyrillic_Capital_Letter_Ghe_With_Stroke
1922           . #\Cyrillic_Small_Letter_Ghe_With_Stroke)
1923         
1924          (#\Cyrillic_Capital_Letter_Ghe_With_Middle_Hook
1925           . #\Cyrillic_Small_Letter_Ghe_With_Middle_Hook)
1926         
1927          (#\Cyrillic_Capital_Letter_Zhe_With_Descender
1928           . #\Cyrillic_Small_Letter_Zhe_With_Descender)
1929         
1930          (#\Cyrillic_Capital_Letter_Ze_With_Descender
1931           . #\Cyrillic_Small_Letter_Ze_With_Descender)
1932         
1933          (#\Cyrillic_Capital_Letter_Ka_With_Descender
1934           . #\Cyrillic_Small_Letter_Ka_With_Descender)
1935         
1936          (#\Cyrillic_Capital_Letter_Ka_With_Vertical_Stroke
1937           . #\Cyrillic_Small_Letter_Ka_With_Vertical_Stroke)
1938         
1939          (#\Cyrillic_Capital_Letter_Ka_With_Stroke
1940           . #\Cyrillic_Small_Letter_Ka_With_Stroke)
1941         
1942          (#\Cyrillic_Capital_Letter_Bashkir_Ka . #\Cyrillic_Small_Letter_Bashkir_Ka)
1943         
1944          (#\Cyrillic_Capital_Letter_En_With_Descender
1945           . #\Cyrillic_Small_Letter_En_With_Descender)
1946         
1947          (#\Cyrillic_Capital_Ligature_En_Ghe . #\Cyrillic_Small_Ligature_En_Ghe)
1948         
1949          (#\Cyrillic_Capital_Letter_Pe_With_Middle_Hook
1950           . #\Cyrillic_Small_Letter_Pe_With_Middle_Hook)
1951         
1952          (#\Cyrillic_Capital_Letter_Abkhasian_Ha
1953           . #\Cyrillic_Small_Letter_Abkhasian_Ha)
1954         
1955          (#\Cyrillic_Capital_Letter_Es_With_Descender
1956           . #\Cyrillic_Small_Letter_Es_With_Descender)
1957         
1958          (#\Cyrillic_Capital_Letter_Te_With_Descender
1959           . #\Cyrillic_Small_Letter_Te_With_Descender)
1960         
1961          (#\Cyrillic_Capital_Letter_Straight_U . #\Cyrillic_Small_Letter_Straight_U)
1962         
1963          (#\Cyrillic_Capital_Letter_Straight_U_With_Stroke
1964           . #\Cyrillic_Small_Letter_Straight_U_With_Stroke)
1965         
1966          (#\Cyrillic_Capital_Letter_Ha_With_Descender
1967           . #\Cyrillic_Small_Letter_Ha_With_Descender)
1968         
1969          (#\Cyrillic_Capital_Ligature_Te_Tse . #\Cyrillic_Small_Ligature_Te_Tse)
1970         
1971          (#\Cyrillic_Capital_Letter_Che_With_Descender
1972           . #\Cyrillic_Small_Letter_Che_With_Descender)
1973         
1974          (#\Cyrillic_Capital_Letter_Che_With_Vertical_Stroke
1975           . #\Cyrillic_Small_Letter_Che_With_Vertical_Stroke)
1976         
1977          (#\Cyrillic_Capital_Letter_Shha . #\Cyrillic_Small_Letter_Shha)
1978         
1979          (#\Cyrillic_Capital_Letter_Abkhasian_Che
1980           . #\Cyrillic_Small_Letter_Abkhasian_Che)
1981         
1982          (#\Cyrillic_Capital_Letter_Abkhasian_Che_With_Descender
1983           . #\Cyrillic_Small_Letter_Abkhasian_Che_With_Descender)
1984         
1985          (#\Cyrillic_Letter_Palochka . #\Cyrillic_Small_Letter_Palochka)
1986         
1987          (#\Cyrillic_Capital_Letter_Zhe_With_Breve
1988           . #\Cyrillic_Small_Letter_Zhe_With_Breve)
1989         
1990          (#\Cyrillic_Capital_Letter_Ka_With_Hook
1991           . #\Cyrillic_Small_Letter_Ka_With_Hook)
1992         
1993          (#\Cyrillic_Capital_Letter_El_With_Tail
1994           . #\Cyrillic_Small_Letter_El_With_Tail)
1995         
1996          (#\Cyrillic_Capital_Letter_En_With_Hook
1997           . #\Cyrillic_Small_Letter_En_With_Hook)
1998         
1999          (#\Cyrillic_Capital_Letter_En_With_Tail
2000           . #\Cyrillic_Small_Letter_En_With_Tail)
2001         
2002          (#\Cyrillic_Capital_Letter_Khakassian_Che
2003           . #\Cyrillic_Small_Letter_Khakassian_Che)
2004         
2005          (#\Cyrillic_Capital_Letter_Em_With_Tail
2006           . #\Cyrillic_Small_Letter_Em_With_Tail)
2007         
2008          (#\Cyrillic_Capital_Letter_A_With_Breve
2009           . #\Cyrillic_Small_Letter_A_With_Breve)
2010         
2011          (#\Cyrillic_Capital_Letter_A_With_Diaeresis
2012           . #\Cyrillic_Small_Letter_A_With_Diaeresis)
2013         
2014          (#\Cyrillic_Capital_Ligature_A_Ie . #\Cyrillic_Small_Ligature_A_Ie)
2015         
2016          (#\Cyrillic_Capital_Letter_Ie_With_Breve
2017           . #\Cyrillic_Small_Letter_Ie_With_Breve)
2018         
2019          (#\Cyrillic_Capital_Letter_Schwa . #\Cyrillic_Small_Letter_Schwa)
2020         
2021          (#\Cyrillic_Capital_Letter_Schwa_With_Diaeresis
2022           . #\Cyrillic_Small_Letter_Schwa_With_Diaeresis)
2023         
2024          (#\Cyrillic_Capital_Letter_Zhe_With_Diaeresis
2025           . #\Cyrillic_Small_Letter_Zhe_With_Diaeresis)
2026         
2027          (#\Cyrillic_Capital_Letter_Ze_With_Diaeresis
2028           . #\Cyrillic_Small_Letter_Ze_With_Diaeresis)
2029         
2030          (#\Cyrillic_Capital_Letter_Abkhasian_Dze
2031           . #\Cyrillic_Small_Letter_Abkhasian_Dze)
2032         
2033          (#\Cyrillic_Capital_Letter_I_With_Macron
2034           . #\Cyrillic_Small_Letter_I_With_Macron)
2035         
2036          (#\Cyrillic_Capital_Letter_I_With_Diaeresis
2037           . #\Cyrillic_Small_Letter_I_With_Diaeresis)
2038         
2039          (#\Cyrillic_Capital_Letter_O_With_Diaeresis
2040           . #\Cyrillic_Small_Letter_O_With_Diaeresis)
2041         
2042          (#\Cyrillic_Capital_Letter_Barred_O . #\Cyrillic_Small_Letter_Barred_O)
2043         
2044          (#\Cyrillic_Capital_Letter_Barred_O_With_Diaeresis
2045           . #\Cyrillic_Small_Letter_Barred_O_With_Diaeresis)
2046         
2047          (#\Cyrillic_Capital_Letter_E_With_Diaeresis
2048           . #\Cyrillic_Small_Letter_E_With_Diaeresis)
2049         
2050          (#\Cyrillic_Capital_Letter_U_With_Macron
2051           . #\Cyrillic_Small_Letter_U_With_Macron)
2052         
2053          (#\Cyrillic_Capital_Letter_U_With_Diaeresis
2054           . #\Cyrillic_Small_Letter_U_With_Diaeresis)
2055         
2056          (#\Cyrillic_Capital_Letter_U_With_Double_Acute
2057           . #\Cyrillic_Small_Letter_U_With_Double_Acute)
2058         
2059          (#\Cyrillic_Capital_Letter_Che_With_Diaeresis
2060           . #\Cyrillic_Small_Letter_Che_With_Diaeresis)
2061         
2062          (#\Cyrillic_Capital_Letter_Ghe_With_Descender
2063           . #\Cyrillic_Small_Letter_Ghe_With_Descender)
2064         
2065          (#\Cyrillic_Capital_Letter_Yeru_With_Diaeresis
2066           . #\Cyrillic_Small_Letter_Yeru_With_Diaeresis)
2067         
2068          (#\Cyrillic_Capital_Letter_Ghe_With_Stroke_And_Hook
2069           . #\Cyrillic_Small_Letter_Ghe_With_Stroke_And_Hook)
2070         
2071          (#\Cyrillic_Capital_Letter_Ha_With_Hook
2072           . #\Cyrillic_Small_Letter_Ha_With_Hook)
2073         
2074          (#\Cyrillic_Capital_Letter_Ha_With_Stroke
2075           . #\Cyrillic_Small_Letter_Ha_With_Stroke)
2076         
2077          (#\Cyrillic_Capital_Letter_Komi_De . #\Cyrillic_Small_Letter_Komi_De)
2078         
2079          (#\Cyrillic_Capital_Letter_Komi_Dje . #\Cyrillic_Small_Letter_Komi_Dje)
2080         
2081          (#\Cyrillic_Capital_Letter_Komi_Zje . #\Cyrillic_Small_Letter_Komi_Zje)
2082         
2083          (#\Cyrillic_Capital_Letter_Komi_Dzje . #\Cyrillic_Small_Letter_Komi_Dzje)
2084         
2085          (#\Cyrillic_Capital_Letter_Komi_Lje . #\Cyrillic_Small_Letter_Komi_Lje)
2086         
2087          (#\Cyrillic_Capital_Letter_Komi_Nje . #\Cyrillic_Small_Letter_Komi_Nje)
2088         
2089          (#\Cyrillic_Capital_Letter_Komi_Sje . #\Cyrillic_Small_Letter_Komi_Sje)
2090         
2091          (#\Cyrillic_Capital_Letter_Komi_Tje . #\Cyrillic_Small_Letter_Komi_Tje)
2092         
2093          (#\Cyrillic_Capital_Letter_Reversed_Ze . #\Cyrillic_Small_Letter_Reversed_Ze)
2094         
2095          (#\Cyrillic_Capital_Letter_El_With_Hook
2096           . #\Cyrillic_Small_Letter_El_With_Hook)
2097         
2098          (#\Armenian_Capital_Letter_Ayb . #\Armenian_Small_Letter_Ayb)
2099         
2100          (#\Armenian_Capital_Letter_Ben . #\Armenian_Small_Letter_Ben)
2101         
2102          (#\Armenian_Capital_Letter_Gim . #\Armenian_Small_Letter_Gim)
2103         
2104          (#\Armenian_Capital_Letter_Da . #\Armenian_Small_Letter_Da)
2105         
2106          (#\Armenian_Capital_Letter_Ech . #\Armenian_Small_Letter_Ech)
2107         
2108          (#\Armenian_Capital_Letter_Za . #\Armenian_Small_Letter_Za)
2109         
2110          (#\Armenian_Capital_Letter_Eh . #\Armenian_Small_Letter_Eh)
2111         
2112          (#\Armenian_Capital_Letter_Et . #\Armenian_Small_Letter_Et)
2113         
2114          (#\Armenian_Capital_Letter_To . #\Armenian_Small_Letter_To)
2115         
2116          (#\Armenian_Capital_Letter_Zhe . #\Armenian_Small_Letter_Zhe)
2117         
2118          (#\Armenian_Capital_Letter_Ini . #\Armenian_Small_Letter_Ini)
2119         
2120          (#\Armenian_Capital_Letter_Liwn . #\Armenian_Small_Letter_Liwn)
2121         
2122          (#\Armenian_Capital_Letter_Xeh . #\Armenian_Small_Letter_Xeh)
2123         
2124          (#\Armenian_Capital_Letter_Ca . #\Armenian_Small_Letter_Ca)
2125         
2126          (#\Armenian_Capital_Letter_Ken . #\Armenian_Small_Letter_Ken)
2127         
2128          (#\Armenian_Capital_Letter_Ho . #\Armenian_Small_Letter_Ho)
2129         
2130          (#\Armenian_Capital_Letter_Ja . #\Armenian_Small_Letter_Ja)
2131         
2132          (#\Armenian_Capital_Letter_Ghad . #\Armenian_Small_Letter_Ghad)
2133         
2134          (#\Armenian_Capital_Letter_Cheh . #\Armenian_Small_Letter_Cheh)
2135         
2136          (#\Armenian_Capital_Letter_Men . #\Armenian_Small_Letter_Men)
2137         
2138          (#\Armenian_Capital_Letter_Yi . #\Armenian_Small_Letter_Yi)
2139         
2140          (#\Armenian_Capital_Letter_Now . #\Armenian_Small_Letter_Now)
2141         
2142          (#\Armenian_Capital_Letter_Sha . #\Armenian_Small_Letter_Sha)
2143         
2144          (#\Armenian_Capital_Letter_Vo . #\Armenian_Small_Letter_Vo)
2145         
2146          (#\Armenian_Capital_Letter_Cha . #\Armenian_Small_Letter_Cha)
2147         
2148          (#\Armenian_Capital_Letter_Peh . #\Armenian_Small_Letter_Peh)
2149         
2150          (#\Armenian_Capital_Letter_Jheh . #\Armenian_Small_Letter_Jheh)
2151         
2152          (#\Armenian_Capital_Letter_Ra . #\Armenian_Small_Letter_Ra)
2153         
2154          (#\Armenian_Capital_Letter_Seh . #\Armenian_Small_Letter_Seh)
2155         
2156          (#\Armenian_Capital_Letter_Vew . #\Armenian_Small_Letter_Vew)
2157         
2158          (#\Armenian_Capital_Letter_Tiwn . #\Armenian_Small_Letter_Tiwn)
2159         
2160          (#\Armenian_Capital_Letter_Reh . #\Armenian_Small_Letter_Reh)
2161         
2162          (#\Armenian_Capital_Letter_Co . #\Armenian_Small_Letter_Co)
2163         
2164          (#\Armenian_Capital_Letter_Yiwn . #\Armenian_Small_Letter_Yiwn)
2165         
2166          (#\Armenian_Capital_Letter_Piwr . #\Armenian_Small_Letter_Piwr)
2167         
2168          (#\Armenian_Capital_Letter_Keh . #\Armenian_Small_Letter_Keh)
2169         
2170          (#\Armenian_Capital_Letter_Oh . #\Armenian_Small_Letter_Oh)
2171         
2172          (#\Armenian_Capital_Letter_Feh . #\Armenian_Small_Letter_Feh)
2173         
2174          (#\U+10A0 . #\U+2D00)
2175          (#\U+10A1 . #\U+2D01)
2176          (#\U+10A2 . #\U+2D02)
2177         
2178          (#\U+10A3 . #\U+2D03)
2179          (#\U+10A4 . #\U+2D04)
2180          (#\U+10A5 . #\U+2D05)
2181         
2182          (#\U+10A6 . #\U+2D06)
2183          (#\U+10A7 . #\U+2D07)
2184          (#\U+10A8 . #\U+2D08)
2185         
2186          (#\U+10A9 . #\U+2D09)
2187          (#\U+10AA . #\U+2D0A)
2188          (#\U+10AB . #\U+2D0B)
2189         
2190          (#\U+10AC . #\U+2D0C)
2191          (#\U+10AD . #\U+2D0D)
2192          (#\U+10AE . #\U+2D0E)
2193         
2194          (#\U+10AF . #\U+2D0F)
2195          (#\U+10B0 . #\U+2D10)
2196          (#\U+10B1 . #\U+2D11)
2197         
2198          (#\U+10B2 . #\U+2D12)
2199          (#\U+10B3 . #\U+2D13)
2200          (#\U+10B4 . #\U+2D14)
2201         
2202          (#\U+10B5 . #\U+2D15)
2203          (#\U+10B6 . #\U+2D16)
2204          (#\U+10B7 . #\U+2D17)
2205         
2206          (#\U+10B8 . #\U+2D18)
2207          (#\U+10B9 . #\U+2D19)
2208          (#\U+10BA . #\U+2D1A)
2209         
2210          (#\U+10BB . #\U+2D1B)
2211          (#\U+10BC . #\U+2D1C)
2212          (#\U+10BD . #\U+2D1D)
2213         
2214          (#\U+10BE . #\U+2D1E)
2215          (#\U+10BF . #\U+2D1F)
2216          (#\U+10C0 . #\U+2D20)
2217         
2218          (#\U+10C1 . #\U+2D21)
2219          (#\U+10C2 . #\U+2D22)
2220          (#\U+10C3 . #\U+2D23)
2221         
2222          (#\U+10C4 . #\U+2D24)
2223          (#\U+10C5 . #\U+2D25)
2224          (#\U+1E00 . #\U+1E01)
2225         
2226          (#\U+1E02 . #\U+1E03)
2227          (#\U+1E04 . #\U+1E05)
2228          (#\U+1E06 . #\U+1E07)
2229         
2230          (#\U+1E08 . #\U+1E09)
2231          (#\U+1E0A . #\U+1E0B)
2232          (#\U+1E0C . #\U+1E0D)
2233         
2234          (#\U+1E0E . #\U+1E0F)
2235          (#\U+1E10 . #\U+1E11)
2236          (#\U+1E12 . #\U+1E13)
2237         
2238          (#\U+1E14 . #\U+1E15)
2239          (#\U+1E16 . #\U+1E17)
2240          (#\U+1E18 . #\U+1E19)
2241         
2242          (#\U+1E1A . #\U+1E1B)
2243          (#\U+1E1C . #\U+1E1D)
2244          (#\U+1E1E . #\U+1E1F)
2245         
2246          (#\U+1E20 . #\U+1E21)
2247          (#\U+1E22 . #\U+1E23)
2248          (#\U+1E24 . #\U+1E25)
2249         
2250          (#\U+1E26 . #\U+1E27)
2251          (#\U+1E28 . #\U+1E29)
2252          (#\U+1E2A . #\U+1E2B)
2253         
2254          (#\U+1E2C . #\U+1E2D)
2255          (#\U+1E2E . #\U+1E2F)
2256          (#\U+1E30 . #\U+1E31)
2257         
2258          (#\U+1E32 . #\U+1E33)
2259          (#\U+1E34 . #\U+1E35)
2260          (#\U+1E36 . #\U+1E37)
2261         
2262          (#\U+1E38 . #\U+1E39)
2263          (#\U+1E3A . #\U+1E3B)
2264          (#\U+1E3C . #\U+1E3D)
2265         
2266          (#\U+1E3E . #\U+1E3F)
2267          (#\U+1E40 . #\U+1E41)
2268          (#\U+1E42 . #\U+1E43)
2269         
2270          (#\U+1E44 . #\U+1E45)
2271          (#\U+1E46 . #\U+1E47)
2272          (#\U+1E48 . #\U+1E49)
2273         
2274          (#\U+1E4A . #\U+1E4B)
2275          (#\U+1E4C . #\U+1E4D)
2276          (#\U+1E4E . #\U+1E4F)
2277         
2278          (#\U+1E50 . #\U+1E51)
2279          (#\U+1E52 . #\U+1E53)
2280          (#\U+1E54 . #\U+1E55)
2281         
2282          (#\U+1E56 . #\U+1E57)
2283          (#\U+1E58 . #\U+1E59)
2284          (#\U+1E5A . #\U+1E5B)
2285         
2286          (#\U+1E5C . #\U+1E5D)
2287          (#\U+1E5E . #\U+1E5F)
2288          (#\U+1E60 . #\U+1E61)
2289         
2290          (#\U+1E62 . #\U+1E63)
2291          (#\U+1E64 . #\U+1E65)
2292          (#\U+1E66 . #\U+1E67)
2293         
2294          (#\U+1E68 . #\U+1E69)
2295          (#\U+1E6A . #\U+1E6B)
2296          (#\U+1E6C . #\U+1E6D)
2297         
2298          (#\U+1E6E . #\U+1E6F)
2299          (#\U+1E70 . #\U+1E71)
2300          (#\U+1E72 . #\U+1E73)
2301         
2302          (#\U+1E74 . #\U+1E75)
2303          (#\U+1E76 . #\U+1E77)
2304          (#\U+1E78 . #\U+1E79)
2305         
2306          (#\U+1E7A . #\U+1E7B)
2307          (#\U+1E7C . #\U+1E7D)
2308          (#\U+1E7E . #\U+1E7F)
2309         
2310          (#\U+1E80 . #\U+1E81)
2311          (#\U+1E82 . #\U+1E83)
2312          (#\U+1E84 . #\U+1E85)
2313         
2314          (#\U+1E86 . #\U+1E87)
2315          (#\U+1E88 . #\U+1E89)
2316          (#\U+1E8A . #\U+1E8B)
2317         
2318          (#\U+1E8C . #\U+1E8D)
2319          (#\U+1E8E . #\U+1E8F)
2320          (#\U+1E90 . #\U+1E91)
2321         
2322          (#\U+1E92 . #\U+1E93)
2323          (#\U+1E94 . #\U+1E95)
2324          (#\U+1EA0 . #\U+1EA1)
2325         
2326          (#\U+1EA2 . #\U+1EA3)
2327          (#\U+1EA4 . #\U+1EA5)
2328          (#\U+1EA6 . #\U+1EA7)
2329         
2330          (#\U+1EA8 . #\U+1EA9)
2331          (#\U+1EAA . #\U+1EAB)
2332          (#\U+1EAC . #\U+1EAD)
2333         
2334          (#\U+1EAE . #\U+1EAF)
2335          (#\U+1EB0 . #\U+1EB1)
2336          (#\U+1EB2 . #\U+1EB3)
2337         
2338          (#\U+1EB4 . #\U+1EB5)
2339          (#\U+1EB6 . #\U+1EB7)
2340          (#\U+1EB8 . #\U+1EB9)
2341         
2342          (#\U+1EBA . #\U+1EBB)
2343          (#\U+1EBC . #\U+1EBD)
2344          (#\U+1EBE . #\U+1EBF)
2345         
2346          (#\U+1EC0 . #\U+1EC1)
2347          (#\U+1EC2 . #\U+1EC3)
2348          (#\U+1EC4 . #\U+1EC5)
2349         
2350          (#\U+1EC6 . #\U+1EC7)
2351          (#\U+1EC8 . #\U+1EC9)
2352          (#\U+1ECA . #\U+1ECB)
2353         
2354          (#\U+1ECC . #\U+1ECD)
2355          (#\U+1ECE . #\U+1ECF)
2356          (#\U+1ED0 . #\U+1ED1)
2357         
2358          (#\U+1ED2 . #\U+1ED3)
2359          (#\U+1ED4 . #\U+1ED5)
2360          (#\U+1ED6 . #\U+1ED7)
2361         
2362          (#\U+1ED8 . #\U+1ED9)
2363          (#\U+1EDA . #\U+1EDB)
2364          (#\U+1EDC . #\U+1EDD)
2365         
2366          (#\U+1EDE . #\U+1EDF)
2367          (#\U+1EE0 . #\U+1EE1)
2368          (#\U+1EE2 . #\U+1EE3)
2369         
2370          (#\U+1EE4 . #\U+1EE5)
2371          (#\U+1EE6 . #\U+1EE7)
2372          (#\U+1EE8 . #\U+1EE9)
2373         
2374          (#\U+1EEA . #\U+1EEB)
2375          (#\U+1EEC . #\U+1EED)
2376          (#\U+1EEE . #\U+1EEF)
2377         
2378          (#\U+1EF0 . #\U+1EF1)
2379          (#\U+1EF2 . #\U+1EF3)
2380          (#\U+1EF4 . #\U+1EF5)
2381         
2382          (#\U+1EF6 . #\U+1EF7)
2383          (#\U+1EF8 . #\U+1EF9)
2384          (#\U+1F08 . #\U+1F00)
2385         
2386          (#\U+1F09 . #\U+1F01)
2387          (#\U+1F0A . #\U+1F02)
2388          (#\U+1F0B . #\U+1F03)
2389         
2390          (#\U+1F0C . #\U+1F04)
2391          (#\U+1F0D . #\U+1F05)
2392          (#\U+1F0E . #\U+1F06)
2393         
2394          (#\U+1F0F . #\U+1F07)
2395          (#\U+1F18 . #\U+1F10)
2396          (#\U+1F19 . #\U+1F11)
2397         
2398          (#\U+1F1A . #\U+1F12)
2399          (#\U+1F1B . #\U+1F13)
2400          (#\U+1F1C . #\U+1F14)
2401         
2402          (#\U+1F1D . #\U+1F15)
2403          (#\U+1F28 . #\U+1F20)
2404          (#\U+1F29 . #\U+1F21)
2405         
2406          (#\U+1F2A . #\U+1F22)
2407          (#\U+1F2B . #\U+1F23)
2408          (#\U+1F2C . #\U+1F24)
2409         
2410          (#\U+1F2D . #\U+1F25)
2411          (#\U+1F2E . #\U+1F26)
2412          (#\U+1F2F . #\U+1F27)
2413         
2414          (#\U+1F38 . #\U+1F30)
2415          (#\U+1F39 . #\U+1F31)
2416          (#\U+1F3A . #\U+1F32)
2417         
2418          (#\U+1F3B . #\U+1F33)
2419          (#\U+1F3C . #\U+1F34)
2420          (#\U+1F3D . #\U+1F35)
2421         
2422          (#\U+1F3E . #\U+1F36)
2423          (#\U+1F3F . #\U+1F37)
2424          (#\U+1F48 . #\U+1F40)
2425         
2426          (#\U+1F49 . #\U+1F41)
2427          (#\U+1F4A . #\U+1F42)
2428          (#\U+1F4B . #\U+1F43)
2429         
2430          (#\U+1F4C . #\U+1F44)
2431          (#\U+1F4D . #\U+1F45)
2432          (#\U+1F59 . #\U+1F51)
2433         
2434          (#\U+1F5B . #\U+1F53)
2435          (#\U+1F5D . #\U+1F55)
2436          (#\U+1F5F . #\U+1F57)
2437         
2438          (#\U+1F68 . #\U+1F60)
2439          (#\U+1F69 . #\U+1F61)
2440          (#\U+1F6A . #\U+1F62)
2441         
2442          (#\U+1F6B . #\U+1F63)
2443          (#\U+1F6C . #\U+1F64)
2444          (#\U+1F6D . #\U+1F65)
2445         
2446          (#\U+1F6E . #\U+1F66)
2447          (#\U+1F6F . #\U+1F67)
2448          (#\U+1F88 . #\U+1F80)
2449         
2450          (#\U+1F89 . #\U+1F81)
2451          (#\U+1F8A . #\U+1F82)
2452          (#\U+1F8B . #\U+1F83)
2453         
2454          (#\U+1F8C . #\U+1F84)
2455          (#\U+1F8D . #\U+1F85)
2456          (#\U+1F8E . #\U+1F86)
2457         
2458          (#\U+1F8F . #\U+1F87)
2459          (#\U+1F98 . #\U+1F90)
2460          (#\U+1F99 . #\U+1F91)
2461         
2462          (#\U+1F9A . #\U+1F92)
2463          (#\U+1F9B . #\U+1F93)
2464          (#\U+1F9C . #\U+1F94)
2465         
2466          (#\U+1F9D . #\U+1F95)
2467          (#\U+1F9E . #\U+1F96)
2468          (#\U+1F9F . #\U+1F97)
2469         
2470          (#\U+1FA8 . #\U+1FA0)
2471          (#\U+1FA9 . #\U+1FA1)
2472          (#\U+1FAA . #\U+1FA2)
2473         
2474          (#\U+1FAB . #\U+1FA3)
2475          (#\U+1FAC . #\U+1FA4)
2476          (#\U+1FAD . #\U+1FA5)
2477         
2478          (#\U+1FAE . #\U+1FA6)
2479          (#\U+1FAF . #\U+1FA7)
2480          (#\U+1FB8 . #\U+1FB0)
2481         
2482          (#\U+1FB9 . #\U+1FB1)
2483          (#\U+1FBA . #\U+1F70)
2484          (#\U+1FBB . #\U+1F71)
2485         
2486          (#\U+1FBC . #\U+1FB3)
2487          (#\U+1FC8 . #\U+1F72)
2488          (#\U+1FC9 . #\U+1F73)
2489         
2490          (#\U+1FCA . #\U+1F74)
2491          (#\U+1FCB . #\U+1F75)
2492          (#\U+1FCC . #\U+1FC3)
2493         
2494          (#\U+1FD8 . #\U+1FD0)
2495          (#\U+1FD9 . #\U+1FD1)
2496          (#\U+1FDA . #\U+1F76)
2497         
2498          (#\U+1FDB . #\U+1F77)
2499          (#\U+1FE8 . #\U+1FE0)
2500          (#\U+1FE9 . #\U+1FE1)
2501         
2502          (#\U+1FEA . #\U+1F7A)
2503          (#\U+1FEB . #\U+1F7B)
2504          (#\U+1FEC . #\U+1FE5)
2505         
2506          (#\U+1FF8 . #\U+1F78)
2507          (#\U+1FF9 . #\U+1F79)
2508          (#\U+1FFA . #\U+1F7C)
2509         
2510          (#\U+1FFB . #\U+1F7D)
2511          (#\U+1FFC . #\U+1FF3)
2512          (#\U+2132 . #\U+214E)
2513         
2514          (#\U+2160 . #\U+2170)
2515          (#\U+2161 . #\U+2171)
2516          (#\U+2162 . #\U+2172)
2517         
2518          (#\U+2163 . #\U+2173)
2519          (#\U+2164 . #\U+2174)
2520          (#\U+2165 . #\U+2175)
2521         
2522          (#\U+2166 . #\U+2176)
2523          (#\U+2167 . #\U+2177)
2524          (#\U+2168 . #\U+2178)
2525         
2526          (#\U+2169 . #\U+2179)
2527          (#\U+216A . #\U+217A)
2528          (#\U+216B . #\U+217B)
2529         
2530          (#\U+216C . #\U+217C)
2531          (#\U+216D . #\U+217D)
2532          (#\U+216E . #\U+217E)
2533         
2534          (#\U+216F . #\U+217F)
2535          (#\U+2183 . #\U+2184)
2536          (#\U+24B6 . #\U+24D0)
2537         
2538          (#\U+24B7 . #\U+24D1)
2539          (#\U+24B8 . #\U+24D2)
2540          (#\U+24B9 . #\U+24D3)
2541         
2542          (#\U+24BA . #\U+24D4)
2543          (#\U+24BB . #\U+24D5)
2544          (#\U+24BC . #\U+24D6)
2545         
2546          (#\U+24BD . #\U+24D7)
2547          (#\U+24BE . #\U+24D8)
2548          (#\U+24BF . #\U+24D9)
2549         
2550          (#\U+24C0 . #\U+24DA)
2551          (#\U+24C1 . #\U+24DB)
2552          (#\U+24C2 . #\U+24DC)
2553         
2554          (#\U+24C3 . #\U+24DD)
2555          (#\U+24C4 . #\U+24DE)
2556          (#\U+24C5 . #\U+24DF)
2557         
2558          (#\U+24C6 . #\U+24E0)
2559          (#\U+24C7 . #\U+24E1)
2560          (#\U+24C8 . #\U+24E2)
2561         
2562          (#\U+24C9 . #\U+24E3)
2563          (#\U+24CA . #\U+24E4)
2564          (#\U+24CB . #\U+24E5)
2565         
2566          (#\U+24CC . #\U+24E6)
2567          (#\U+24CD . #\U+24E7)
2568          (#\U+24CE . #\U+24E8)
2569         
2570          (#\U+24CF . #\U+24E9)
2571          (#\U+2C00 . #\U+2C30)
2572          (#\U+2C01 . #\U+2C31)
2573         
2574          (#\U+2C02 . #\U+2C32)
2575          (#\U+2C03 . #\U+2C33)
2576          (#\U+2C04 . #\U+2C34)
2577         
2578          (#\U+2C05 . #\U+2C35)
2579          (#\U+2C06 . #\U+2C36)
2580          (#\U+2C07 . #\U+2C37)
2581         
2582          (#\U+2C08 . #\U+2C38)
2583          (#\U+2C09 . #\U+2C39)
2584          (#\U+2C0A . #\U+2C3A)
2585         
2586          (#\U+2C0B . #\U+2C3B)
2587          (#\U+2C0C . #\U+2C3C)
2588          (#\U+2C0D . #\U+2C3D)
2589         
2590          (#\U+2C0E . #\U+2C3E)
2591          (#\U+2C0F . #\U+2C3F)
2592          (#\U+2C10 . #\U+2C40)
2593         
2594          (#\U+2C11 . #\U+2C41)
2595          (#\U+2C12 . #\U+2C42)
2596          (#\U+2C13 . #\U+2C43)
2597         
2598          (#\U+2C14 . #\U+2C44)
2599          (#\U+2C15 . #\U+2C45)
2600          (#\U+2C16 . #\U+2C46)
2601         
2602          (#\U+2C17 . #\U+2C47)
2603          (#\U+2C18 . #\U+2C48)
2604          (#\U+2C19 . #\U+2C49)
2605         
2606          (#\U+2C1A . #\U+2C4A)
2607          (#\U+2C1B . #\U+2C4B)
2608          (#\U+2C1C . #\U+2C4C)
2609         
2610          (#\U+2C1D . #\U+2C4D)
2611          (#\U+2C1E . #\U+2C4E)
2612          (#\U+2C1F . #\U+2C4F)
2613         
2614          (#\U+2C20 . #\U+2C50)
2615          (#\U+2C21 . #\U+2C51)
2616          (#\U+2C22 . #\U+2C52)
2617         
2618          (#\U+2C23 . #\U+2C53)
2619          (#\U+2C24 . #\U+2C54)
2620          (#\U+2C25 . #\U+2C55)
2621         
2622          (#\U+2C26 . #\U+2C56)
2623          (#\U+2C27 . #\U+2C57)
2624          (#\U+2C28 . #\U+2C58)
2625         
2626          (#\U+2C29 . #\U+2C59)
2627          (#\U+2C2A . #\U+2C5A)
2628          (#\U+2C2B . #\U+2C5B)
2629         
2630          (#\U+2C2C . #\U+2C5C)
2631          (#\U+2C2D . #\U+2C5D)
2632          (#\U+2C2E . #\U+2C5E)
2633         
2634          (#\U+2C60 . #\U+2C61)
2635          (#\U+2C62 . #\Latin_Small_Letter_L_With_Middle_Tilde)
2636         
2637          (#\U+2C63 . #\U+1D7D)
2638          (#\U+2C64 . #\Latin_Small_Letter_R_With_Tail)
2639         
2640          (#\U+2C67 . #\U+2C68)
2641          (#\U+2C69 . #\U+2C6A)
2642          (#\U+2C6B . #\U+2C6C)
2643         
2644          (#\U+2C75 . #\U+2C76)
2645          (#\U+2C80 . #\U+2C81)
2646          (#\U+2C82 . #\U+2C83)
2647         
2648          (#\U+2C84 . #\U+2C85)
2649          (#\U+2C86 . #\U+2C87)
2650          (#\U+2C88 . #\U+2C89)
2651         
2652          (#\U+2C8A . #\U+2C8B)
2653          (#\U+2C8C . #\U+2C8D)
2654          (#\U+2C8E . #\U+2C8F)
2655         
2656          (#\U+2C90 . #\U+2C91)
2657          (#\U+2C92 . #\U+2C93)
2658          (#\U+2C94 . #\U+2C95)
2659         
2660          (#\U+2C96 . #\U+2C97)
2661          (#\U+2C98 . #\U+2C99)
2662          (#\U+2C9A . #\U+2C9B)
2663         
2664          (#\U+2C9C . #\U+2C9D)
2665          (#\U+2C9E . #\U+2C9F)
2666          (#\U+2CA0 . #\U+2CA1)
2667         
2668          (#\U+2CA2 . #\U+2CA3)
2669          (#\U+2CA4 . #\U+2CA5)
2670          (#\U+2CA6 . #\U+2CA7)
2671         
2672          (#\U+2CA8 . #\U+2CA9)
2673          (#\U+2CAA . #\U+2CAB)
2674          (#\U+2CAC . #\U+2CAD)
2675         
2676          (#\U+2CAE . #\U+2CAF)
2677          (#\U+2CB0 . #\U+2CB1)
2678          (#\U+2CB2 . #\U+2CB3)
2679         
2680          (#\U+2CB4 . #\U+2CB5)
2681          (#\U+2CB6 . #\U+2CB7)
2682          (#\U+2CB8 . #\U+2CB9)
2683         
2684          (#\U+2CBA . #\U+2CBB)
2685          (#\U+2CBC . #\U+2CBD)
2686          (#\U+2CBE . #\U+2CBF)
2687         
2688          (#\U+2CC0 . #\U+2CC1)
2689          (#\U+2CC2 . #\U+2CC3)
2690          (#\U+2CC4 . #\U+2CC5)
2691         
2692          (#\U+2CC6 . #\U+2CC7)
2693          (#\U+2CC8 . #\U+2CC9)
2694          (#\U+2CCA . #\U+2CCB)
2695         
2696          (#\U+2CCC . #\U+2CCD)
2697          (#\U+2CCE . #\U+2CCF)
2698          (#\U+2CD0 . #\U+2CD1)
2699         
2700          (#\U+2CD2 . #\U+2CD3)
2701          (#\U+2CD4 . #\U+2CD5)
2702          (#\U+2CD6 . #\U+2CD7)
2703         
2704          (#\U+2CD8 . #\U+2CD9)
2705          (#\U+2CDA . #\U+2CDB)
2706          (#\U+2CDC . #\U+2CDD)
2707         
2708          (#\U+2CDE . #\U+2CDF)
2709          (#\U+2CE0 . #\U+2CE1)
2710          (#\U+2CE2 . #\U+2CE3)
2711         
2712          (#\U+FF21 . #\U+FF41)
2713          (#\U+FF22 . #\U+FF42)
2714          (#\U+FF23 . #\U+FF43)
2715         
2716          (#\U+FF24 . #\U+FF44)
2717          (#\U+FF25 . #\U+FF45)
2718          (#\U+FF26 . #\U+FF46)
2719         
2720          (#\U+FF27 . #\U+FF47)
2721          (#\U+FF28 . #\U+FF48)
2722          (#\U+FF29 . #\U+FF49)
2723         
2724          (#\U+FF2A . #\U+FF4A)
2725          (#\U+FF2B . #\U+FF4B)
2726          (#\U+FF2C . #\U+FF4C)
2727         
2728          (#\U+FF2D . #\U+FF4D)
2729          (#\U+FF2E . #\U+FF4E)
2730          (#\U+FF2F . #\U+FF4F)
2731         
2732          (#\U+FF30 . #\U+FF50)
2733          (#\U+FF31 . #\U+FF51)
2734          (#\U+FF32 . #\U+FF52)
2735         
2736          (#\U+FF33 . #\U+FF53)
2737          (#\U+FF34 . #\U+FF54)
2738          (#\U+FF35 . #\U+FF55)
2739         
2740          (#\U+FF36 . #\U+FF56)
2741          (#\U+FF37 . #\U+FF57)
2742          (#\U+FF38 . #\U+FF58)
2743         
2744          (#\U+FF39 . #\U+FF59)
2745          (#\U+FF3A . #\U+FF5A)
2746          (#\U+10400 . #\U+10428)
2747         
2748          (#\U+10401 . #\U+10429)
2749          (#\U+10402 . #\U+1042A)
2750          (#\U+10403 . #\U+1042B)
2751         
2752          (#\U+10404 . #\U+1042C)
2753          (#\U+10405 . #\U+1042D)
2754          (#\U+10406 . #\U+1042E)
2755         
2756          (#\U+10407 . #\U+1042F)
2757          (#\U+10408 . #\U+10430)
2758          (#\U+10409 . #\U+10431)
2759         
2760          (#\U+1040A . #\U+10432)
2761          (#\U+1040B . #\U+10433)
2762          (#\U+1040C . #\U+10434)
2763         
2764          (#\U+1040D . #\U+10435)
2765          (#\U+1040E . #\U+10436)
2766          (#\U+1040F . #\U+10437)
2767         
2768          (#\U+10410 . #\U+10438)
2769          (#\U+10411 . #\U+10439)
2770          (#\U+10412 . #\U+1043A)
2771         
2772          (#\U+10413 . #\U+1043B)
2773          (#\U+10414 . #\U+1043C)
2774          (#\U+10415 . #\U+1043D)
2775         
2776          (#\U+10416 . #\U+1043E)
2777          (#\U+10417 . #\U+1043F)
2778          (#\U+10418 . #\U+10440)
2779         
2780          (#\U+10419 . #\U+10441)
2781          (#\U+1041A . #\U+10442)
2782          (#\U+1041B . #\U+10443)
2783         
2784          (#\U+1041C . #\U+10444)
2785          (#\U+1041D . #\U+10445)
2786          (#\U+1041E . #\U+10446)
2787         
2788          (#\U+1041F . #\U+10447)
2789          (#\U+10420 . #\U+10448)
2790          (#\U+10421 . #\U+10449)
2791         
2792          (#\U+10422 . #\U+1044A)
2793          (#\U+10423 . #\U+1044B)
2794          (#\U+10424 . #\U+1044C)
2795         
2796          (#\U+10425 . #\U+1044D)
2797          (#\U+10426 . #\U+1044E)
2798          (#\U+10427 . #\U+1044F)
2799          ))
2800       (max-upper #\u+0000)
2801       (max-lower #\u+0000))
2802  (declare (optimize speed)) ;; make sure everything gets inlined that needs to be.
2803  (dolist (pair mapping)
2804    (destructuring-bind (upper . lower) pair
2805      (when (char> upper max-upper)
2806        (setq max-upper upper))
2807      (when (char> lower max-lower)
2808        (setq max-lower lower))))
2809  (let* ((upper-to-lower (make-array (the fixnum (1+ (the fixnum (char-code max-upper)))) :element-type '(signed-byte 16)))
2810         (lower-to-upper (make-array (the fixnum (1+ (the fixnum (char-code max-lower)))) :element-type '(signed-byte 16))))
2811    (dolist (pair mapping)
2812      (destructuring-bind (upper . lower) pair
2813        (let* ((upper-code (char-code upper))
2814               (lower-code (char-code lower))
2815               (diff (- lower-code upper-code)))
2816          (declare (type (mod #x110000) upper-code lower-code)
2817                   (type (signed-byte 16) diff))
2818          (setf (aref upper-to-lower upper-code) diff
2819                (aref lower-to-upper lower-code) (the fixnum (- diff))))))
2820    (do* ((upper (char-code #\A) (1+ upper))
2821          (lower (char-code #\a) (1+ lower)))
2822         ((> upper (char-code #\Z)))
2823      (setf (aref upper-to-lower upper) (- lower upper)
2824            (aref lower-to-upper lower) (- upper lower)))
2825    (setq *lower-to-upper* lower-to-upper
2826          *upper-to-lower* upper-to-lower)
2827    nil))
2828
2829(eval-when (:compile-toplevel)
2830  (declaim (inline %char-code-case-fold)))
2831
2832(defun %char-code-case-fold (code table)
2833  (declare (type (mod #x110000) code)
2834           (type (simple-array (signed-byte 16) (*)) table))
2835  (if (>= code (length table))
2836    code
2837    (locally (declare (optimize (speed 3) (safety 0)))
2838      (the fixnum (+ code (the (signed-byte 16) (aref table code)))))))
2839
2840(defun %char-code-upcase (code)
2841  (%char-code-case-fold code *lower-to-upper*))
2842
2843(defun char-upcase (c)
2844  "Return CHAR converted to upper-case if that is possible.  Don't convert
2845   lowercase eszet (U+DF)."
2846  (declare (optimize speed))            ; so that %char-code-case-fold inlines
2847  (code-char (the valid-char-code (%char-code-case-fold (char-code c) *lower-to-upper*))))
2848
2849
2850
2851
2852(defun %char-code-downcase (code)
2853  (declare (type (mod #x110000) code))
2854  (let* ((table *upper-to-lower*))
2855    (declare (type (simple-array (signed-byte 16) (*)) table))
2856    (if (>= code (length table))
2857      code
2858      (locally (declare (optimize (speed 3) (safety 0)))
2859        (the fixnum (+ code (the (signed-byte 16) (aref table code))))))))
2860
2861
2862;;;True for a-z, and maybe other things.
2863(defun lower-case-p (c)
2864  "The argument must be a character object; LOWER-CASE-P returns T if the
2865   argument is a lower-case character, NIL otherwise."
2866  (let* ((code (char-code c))
2867         (table *lower-to-upper*))
2868    (declare (type (mod #x110000) code)
2869             (type (simple-array (signed-byte 16) (*)) table))
2870    (if (< code (length table))
2871      (not (eql 0 (the (signed-byte 16) (aref table code)))))))
2872
2873
2874
2875(defstatic *alpha-char-bits*
2876  (let* ((bits (make-array #x2fa1e :element-type 'bit)))
2877    (declare (optimize speed)) ;; make sure everything gets inlined that needs to be.
2878    (dolist (range '((#x0041 . #x005A)
2879                     (#x0061 . #x007A)
2880                     #x00AA
2881                     #x00B5
2882                     #x00BA
2883                     (#x00C0 . #x00D6)
2884                     (#x00D8 . #x00F6)
2885                     (#x00F8 . #x01BA)
2886                     #x01BB
2887                     (#x01BC . #x01BF)
2888                     (#x01C0 . #x01C3)
2889                     (#x01C4 . #x0293)
2890                     #x0294
2891                     (#x0295 . #x02AF)
2892                     (#x02B0 . #x02C1)
2893                     (#x02C6 . #x02D1)
2894                     (#x02E0 . #x02E4)
2895                     #x02EC
2896                     #x02EE
2897                     #x0345
2898                     (#x0370 . #x0373)
2899                     #x0374
2900                     (#x0376 . #x0377)
2901                     #x037A
2902                     (#x037B . #x037D)
2903                     #x0386
2904                     (#x0388 . #x038A)
2905                     #x038C
2906                     (#x038E . #x03A1)
2907                     (#x03A3 . #x03F5)
2908                     (#x03F7 . #x0481)
2909                     (#x048A . #x0523)
2910                     (#x0531 . #x0556)
2911                     #x0559
2912                     (#x0561 . #x0587)
2913                     (#x05B0 . #x05BD)
2914                     #x05BF
2915                     (#x05C1 . #x05C2)
2916                     (#x05C4 . #x05C5)
2917                     #x05C7
2918                     (#x05D0 . #x05EA)
2919                     (#x05F0 . #x05F2)
2920                     (#x0610 . #x061A)
2921                     (#x0621 . #x063F)
2922                     #x0640
2923                     (#x0641 . #x064A)
2924                     (#x064B . #x0657)
2925                     (#x0659 . #x065E)
2926                     (#x066E . #x066F)
2927                     #x0670
2928                     (#x0671 . #x06D3)
2929                     #x06D5
2930                     (#x06D6 . #x06DC)
2931                     (#x06E1 . #x06E4)
2932                     (#x06E5 . #x06E6)
2933                     (#x06E7 . #x06E8)
2934                     #x06ED
2935                     (#x06EE . #x06EF)
2936                     (#x06FA . #x06FC)
2937                     #x06FF
2938                     #x0710
2939                     #x0711
2940                     (#x0712 . #x072F)
2941                     (#x0730 . #x073F)
2942                     (#x074D . #x07A5)
2943                     (#x07A6 . #x07B0)
2944                     #x07B1
2945                     (#x07CA . #x07EA)
2946                     (#x07F4 . #x07F5)
2947                     #x07FA
2948                     (#x0901 . #x0902)
2949                     #x0903
2950                     (#x0904 . #x0939)
2951                     #x093D
2952                     (#x093E . #x0940)
2953                     (#x0941 . #x0948)
2954                     (#x0949 . #x094C)
2955                     #x0950
2956                     (#x0958 . #x0961)
2957                     (#x0962 . #x0963)
2958                     #x0971
2959                     #x0972
2960                     (#x097B . #x097F)
2961                     #x0981
2962                     (#x0982 . #x0983)
2963                     (#x0985 . #x098C)
2964                     (#x098F . #x0990)
2965                     (#x0993 . #x09A8)
2966                     (#x09AA . #x09B0)
2967                     #x09B2
2968                     (#x09B6 . #x09B9)
2969                     #x09BD
2970                     (#x09BE . #x09C0)
2971                     (#x09C1 . #x09C4)
2972                     (#x09C7 . #x09C8)
2973                     (#x09CB . #x09CC)
2974                     #x09CE
2975                     #x09D7
2976                     (#x09DC . #x09DD)
2977                     (#x09DF . #x09E1)
2978                     (#x09E2 . #x09E3)
2979                     (#x09F0 . #x09F1)
2980                     (#x0A01 . #x0A02)
2981                     #x0A03
2982                     (#x0A05 . #x0A0A)
2983                     (#x0A0F . #x0A10)
2984                     (#x0A13 . #x0A28)
2985                     (#x0A2A . #x0A30)
2986                     (#x0A32 . #x0A33)
2987                     (#x0A35 . #x0A36)
2988                     (#x0A38 . #x0A39)
2989                     (#x0A3E . #x0A40)
2990                     (#x0A41 . #x0A42)
2991                     (#x0A47 . #x0A48)
2992                     (#x0A4B . #x0A4C)
2993                     #x0A51
2994                     (#x0A59 . #x0A5C)
2995                     #x0A5E
2996                     (#x0A70 . #x0A71)
2997                     (#x0A72 . #x0A74)
2998                     #x0A75
2999                     (#x0A81 . #x0A82)
3000                     #x0A83
3001                     (#x0A85 . #x0A8D)
3002                     (#x0A8F . #x0A91)
3003                     (#x0A93 . #x0AA8)
3004                     (#x0AAA . #x0AB0)
3005                     (#x0AB2 . #x0AB3)
3006                     (#x0AB5 . #x0AB9)
3007                     #x0ABD
3008                     (#x0ABE . #x0AC0)
3009                     (#x0AC1 . #x0AC5)
3010                     (#x0AC7 . #x0AC8)
3011                     #x0AC9
3012                     (#x0ACB . #x0ACC)
3013                     #x0AD0
3014                     (#x0AE0 . #x0AE1)
3015                     (#x0AE2 . #x0AE3)
3016                     #x0B01
3017                     (#x0B02 . #x0B03)
3018                     (#x0B05 . #x0B0C)
3019                     (#x0B0F . #x0B10)
3020                     (#x0B13 . #x0B28)
3021                     (#x0B2A . #x0B30)
3022                     (#x0B32 . #x0B33)
3023                     (#x0B35 . #x0B39)
3024                     #x0B3D
3025                     #x0B3E
3026                     #x0B3F
3027                     #x0B40
3028                     (#x0B41 . #x0B44)
3029                     (#x0B47 . #x0B48)
3030                     (#x0B4B . #x0B4C)
3031                     #x0B56
3032                     #x0B57
3033                     (#x0B5C . #x0B5D)
3034                     (#x0B5F . #x0B61)
3035                     (#x0B62 . #x0B63)
3036                     #x0B71
3037                     #x0B82
3038                     #x0B83
3039                     (#x0B85 . #x0B8A)
3040                     (#x0B8E . #x0B90)
3041                     (#x0B92 . #x0B95)
3042                     (#x0B99 . #x0B9A)
3043                     #x0B9C
3044                     (#x0B9E . #x0B9F)
3045                     (#x0BA3 . #x0BA4)
3046                     (#x0BA8 . #x0BAA)
3047                     (#x0BAE . #x0BB9)
3048                     (#x0BBE . #x0BBF)
3049                     #x0BC0
3050                     (#x0BC1 . #x0BC2)
3051                     (#x0BC6 . #x0BC8)
3052                     (#x0BCA . #x0BCC)
3053                     #x0BD0
3054                     #x0BD7
3055                     (#x0C01 . #x0C03)
3056                     (#x0C05 . #x0C0C)
3057                     (#x0C0E . #x0C10)
3058                     (#x0C12 . #x0C28)
3059                     (#x0C2A . #x0C33)
3060                     (#x0C35 . #x0C39)
3061                     #x0C3D
3062                     (#x0C3E . #x0C40)
3063                     (#x0C41 . #x0C44)
3064                     (#x0C46 . #x0C48)
3065                     (#x0C4A . #x0C4C)
3066                     (#x0C55 . #x0C56)
3067                     (#x0C58 . #x0C59)
3068                     (#x0C60 . #x0C61)
3069                     (#x0C62 . #x0C63)
3070                     (#x0C82 . #x0C83)
3071                     (#x0C85 . #x0C8C)
3072                     (#x0C8E . #x0C90)
3073                     (#x0C92 . #x0CA8)
3074                     (#x0CAA . #x0CB3)
3075                     (#x0CB5 . #x0CB9)
3076                     #x0CBD
3077                     #x0CBE
3078                     #x0CBF
3079                     (#x0CC0 . #x0CC4)
3080                     #x0CC6
3081                     (#x0CC7 . #x0CC8)
3082                     (#x0CCA . #x0CCB)
3083                     #x0CCC
3084                     (#x0CD5 . #x0CD6)
3085                     #x0CDE
3086                     (#x0CE0 . #x0CE1)
3087                     (#x0CE2 . #x0CE3)
3088                     (#x0D02 . #x0D03)
3089                     (#x0D05 . #x0D0C)
3090                     (#x0D0E . #x0D10)
3091                     (#x0D12 . #x0D28)
3092                     (#x0D2A . #x0D39)
3093                     #x0D3D
3094                     (#x0D3E . #x0D40)
3095                     (#x0D41 . #x0D44)
3096                     (#x0D46 . #x0D48)
3097                     (#x0D4A . #x0D4C)
3098                     #x0D57
3099                     (#x0D60 . #x0D61)
3100                     (#x0D62 . #x0D63)
3101                     (#x0D7A . #x0D7F)
3102                     (#x0D82 . #x0D83)
3103                     (#x0D85 . #x0D96)
3104                     (#x0D9A . #x0DB1)
3105                     (#x0DB3 . #x0DBB)
3106                     #x0DBD
3107                     (#x0DC0 . #x0DC6)
3108                     (#x0DCF . #x0DD1)
3109                     (#x0DD2 . #x0DD4)
3110                     #x0DD6
3111                     (#x0DD8 . #x0DDF)
3112                     (#x0DF2 . #x0DF3)
3113                     (#x0E01 . #x0E30)
3114                     #x0E31
3115                     (#x0E32 . #x0E33)
3116                     (#x0E34 . #x0E3A)
3117                     (#x0E40 . #x0E45)
3118                     #x0E46
3119                     #x0E4D
3120                     (#x0E81 . #x0E82)
3121                     #x0E84
3122                     (#x0E87 . #x0E88)
3123                     #x0E8A
3124                     #x0E8D
3125                     (#x0E94 . #x0E97)
3126                     (#x0E99 . #x0E9F)
3127                     (#x0EA1 . #x0EA3)
3128                     #x0EA5
3129                     #x0EA7
3130                     (#x0EAA . #x0EAB)
3131                     (#x0EAD . #x0EB0)
3132                     #x0EB1
3133                     (#x0EB2 . #x0EB3)
3134                     (#x0EB4 . #x0EB9)
3135                     (#x0EBB . #x0EBC)
3136                     #x0EBD
3137                     (#x0EC0 . #x0EC4)
3138                     #x0EC6
3139                     #x0ECD
3140                     (#x0EDC . #x0EDD)
3141                     #x0F00
3142                     (#x0F40 . #x0F47)
3143                     (#x0F49 . #x0F6C)
3144                     (#x0F71 . #x0F7E)
3145                     #x0F7F
3146                     (#x0F80 . #x0F81)
3147                     (#x0F88 . #x0F8B)
3148                     (#x0F90 . #x0F97)
3149                     (#x0F99 . #x0FBC)
3150                     (#x1000 . #x102A)
3151                     (#x102B . #x102C)
3152                     (#x102D . #x1030)
3153                     #x1031
3154                     (#x1032 . #x1036)
3155                     #x1038
3156                     (#x103B . #x103C)
3157                     (#x103D . #x103E)
3158                     #x103F
3159                     (#x1050 . #x1055)
3160                     (#x1056 . #x1057)
3161                     (#x1058 . #x1059)
3162                     (#x105A . #x105D)
3163                     (#x105E . #x1060)
3164                     #x1061
3165                     #x1062
3166                     (#x1065 . #x1066)
3167                     (#x1067 . #x1068)
3168                     (#x106E . #x1070)
3169                     (#x1071 . #x1074)
3170                     (#x1075 . #x1081)
3171                     #x1082
3172                     (#x1083 . #x1084)
3173                     (#x1085 . #x1086)
3174                     #x108E
3175                     (#x10A0 . #x10C5)
3176                     (#x10D0 . #x10FA)
3177                     #x10FC
3178                     (#x1100 . #x1159)
3179                     (#x115F . #x11A2)
3180                     (#x11A8 . #x11F9)
3181                     (#x1200 . #x1248)
3182                     (#x124A . #x124D)
3183                     (#x1250 . #x1256)
3184                     #x1258
3185                     (#x125A . #x125D)
3186                     (#x1260 . #x1288)
3187                     (#x128A . #x128D)
3188                     (#x1290 . #x12B0)
3189                     (#x12B2 . #x12B5)
3190                     (#x12B8 . #x12BE)
3191                     #x12C0
3192                     (#x12C2 . #x12C5)
3193                     (#x12C8 . #x12D6)
3194                     (#x12D8 . #x1310)
3195                     (#x1312 . #x1315)
3196                     (#x1318 . #x135A)
3197                     #x135F
3198                     (#x1380 . #x138F)
3199                     (#x13A0 . #x13F4)
3200                     (#x1401 . #x166C)
3201                     (#x166F . #x1676)
3202                     (#x1681 . #x169A)
3203                     (#x16A0 . #x16EA)
3204                     (#x16EE . #x16F0)
3205                     (#x1700 . #x170C)
3206                     (#x170E . #x1711)
3207                     (#x1712 . #x1713)
3208                     (#x1720 . #x1731)
3209                     (#x1732 . #x1733)
3210                     (#x1740 . #x1751)
3211                     (#x1752 . #x1753)
3212                     (#x1760 . #x176C)
3213                     (#x176E . #x1770)
3214                     (#x1772 . #x1773)
3215                     (#x1780 . #x17B3)
3216                     #x17B6
3217                     (#x17B7 . #x17BD)
3218                     (#x17BE . #x17C5)
3219                     #x17C6
3220                     (#x17C7 . #x17C8)
3221                     #x17D7
3222                     #x17DC
3223                     (#x1820 . #x1842)
3224                     #x1843
3225                     (#x1844 . #x1877)
3226                     (#x1880 . #x18A8)
3227                     #x18A9
3228                     #x18AA
3229                     (#x1900 . #x191C)
3230                     (#x1920 . #x1922)
3231                     (#x1923 . #x1926)
3232                     (#x1927 . #x1928)
3233                     (#x1929 . #x192B)
3234                     (#x1930 . #x1931)
3235                     #x1932
3236                     (#x1933 . #x1938)
3237                     (#x1950 . #x196D)
3238                     (#x1970 . #x1974)
3239                     (#x1980 . #x19A9)
3240                     (#x19B0 . #x19C0)
3241                     (#x19C1 . #x19C7)
3242                     (#x19C8 . #x19C9)
3243                     (#x1A00 . #x1A16)
3244                     (#x1A17 . #x1A18)
3245                     (#x1A19 . #x1A1B)
3246                     (#x1B00 . #x1B03)
3247                     #x1B04
3248                     (#x1B05 . #x1B33)
3249                     #x1B35
3250                     (#x1B36 . #x1B3A)
3251                     #x1B3B
3252                     #x1B3C
3253                     (#x1B3D . #x1B41)
3254                     #x1B42
3255                     #x1B43
3256                     (#x1B45 . #x1B4B)
3257                     (#x1B80 . #x1B81)
3258                     #x1B82
3259                     (#x1B83 . #x1BA0)
3260                     #x1BA1
3261                     (#x1BA2 . #x1BA5)
3262                     (#x1BA6 . #x1BA7)
3263                     (#x1BA8 . #x1BA9)
3264                     (#x1BAE . #x1BAF)
3265                     (#x1C00 . #x1C23)
3266                     (#x1C24 . #x1C2B)
3267                     (#x1C2C . #x1C33)
3268                     (#x1C34 . #x1C35)
3269                     (#x1C4D . #x1C4F)
3270                     (#x1C5A . #x1C77)
3271                     (#x1C78 . #x1C7D)
3272                     (#x1D00 . #x1D2B)
3273                     (#x1D2C . #x1D61)
3274                     (#x1D62 . #x1D77)
3275                     #x1D78
3276                     (#x1D79 . #x1D9A)
3277                     (#x1D9B . #x1DBF)
3278                     (#x1E00 . #x1F15)
3279                     (#x1F18 . #x1F1D)
3280                     (#x1F20 . #x1F45)
3281                     (#x1F48 . #x1F4D)
3282                     (#x1F50 . #x1F57)
3283                     #x1F59
3284                     #x1F5B
3285                     #x1F5D
3286                     (#x1F5F . #x1F7D)
3287                     (#x1F80 . #x1FB4)
3288                     (#x1FB6 . #x1FBC)
3289                     #x1FBE
3290                     (#x1FC2 . #x1FC4)
3291                     (#x1FC6 . #x1FCC)
3292                     (#x1FD0 . #x1FD3)
3293                     (#x1FD6 . #x1FDB)
3294                     (#x1FE0 . #x1FEC)
3295                     (#x1FF2 . #x1FF4)
3296                     (#x1FF6 . #x1FFC)
3297                     #x2071
3298                     #x207F
3299                     (#x2090 . #x2094)
3300                     #x2102
3301                     #x2107
3302                     (#x210A . #x2113)
3303                     #x2115
3304                     (#x2119 . #x211D)
3305                     #x2124
3306                     #x2126
3307                     #x2128
3308                     (#x212A . #x212D)
3309                     (#x212F . #x2134)
3310                     (#x2135 . #x2138)
3311                     #x2139
3312                     (#x213C . #x213F)
3313                     (#x2145 . #x2149)
3314                     #x214E
3315                     (#x2160 . #x2182)
3316                     (#x2183 . #x2184)
3317                     (#x2185 . #x2188)
3318                     (#x24B6 . #x24E9)
3319                     (#x2C00 . #x2C2E)
3320                     (#x2C30 . #x2C5E)
3321                     (#x2C60 . #x2C6F)
3322                     (#x2C71 . #x2C7C)
3323                     #x2C7D
3324                     (#x2C80 . #x2CE4)
3325                     (#x2D00 . #x2D25)
3326                     (#x2D30 . #x2D65)
3327                     #x2D6F
3328                     (#x2D80 . #x2D96)
3329                     (#x2DA0 . #x2DA6)
3330                     (#x2DA8 . #x2DAE)
3331                     (#x2DB0 . #x2DB6)
3332                     (#x2DB8 . #x2DBE)
3333                     (#x2DC0 . #x2DC6)
3334                     (#x2DC8 . #x2DCE)
3335                     (#x2DD0 . #x2DD6)
3336                     (#x2DD8 . #x2DDE)
3337                     (#x2DE0 . #x2DFF)
3338                     #x2E2F
3339                     #x3005
3340                     #x3006
3341                     #x3007
3342                     (#x3021 . #x3029)
3343                     (#x3031 . #x3035)
3344                     (#x3038 . #x303A)
3345                     #x303B
3346                     #x303C
3347                     (#x3041 . #x3096)
3348                     (#x309D . #x309E)
3349                     #x309F
3350                     (#x30A1 . #x30FA)
3351                     (#x30FC . #x30FE)
3352                     #x30FF
3353                     (#x3105 . #x312D)
3354                     (#x3131 . #x318E)
3355                     (#x31A0 . #x31B7)
3356                     (#x31F0 . #x31FF)
3357                     (#x3400 . #x4DB5)
3358                     (#x4E00 . #x9FC3)
3359                     (#xA000 . #xA014)
3360                     #xA015
3361                     (#xA016 . #xA48C)
3362                     (#xA500 . #xA60B)
3363                     #xA60C
3364                     (#xA610 . #xA61F)
3365                     (#xA62A . #xA62B)
3366                     (#xA640 . #xA65F)
3367                     (#xA662 . #xA66D)
3368                     #xA66E
3369                     #xA67F
3370                     (#xA680 . #xA697)
3371                     (#xA717 . #xA71F)
3372                     (#xA722 . #xA76F)
3373                     #xA770
3374                     (#xA771 . #xA787)
3375                     #xA788
3376                     (#xA78B . #xA78C)
3377                     (#xA7FB . #xA801)
3378                     (#xA803 . #xA805)
3379                     (#xA807 . #xA80A)
3380                     (#xA80C . #xA822)
3381                     (#xA823 . #xA824)
3382                     (#xA825 . #xA826)
3383                     #xA827
3384                     (#xA840 . #xA873)
3385                     (#xA880 . #xA881)
3386                     (#xA882 . #xA8B3)
3387                     (#xA8B4 . #xA8C3)
3388                     (#xA90A . #xA925)
3389                     (#xA926 . #xA92A)
3390                     (#xA930 . #xA946)
3391                     (#xA947 . #xA951)
3392                     #xA952
3393                     (#xAA00 . #xAA28)
3394                     (#xAA29 . #xAA2E)
3395                     (#xAA2F . #xAA30)
3396                     (#xAA31 . #xAA32)
3397                     (#xAA33 . #xAA34)
3398                     (#xAA35 . #xAA36)
3399                     (#xAA40 . #xAA42)
3400                     #xAA43
3401                     (#xAA44 . #xAA4B)
3402                     #xAA4C
3403                     #xAA4D
3404                     (#xAC00 . #xD7A3)
3405                     (#xF900 . #xFA2D)
3406                     (#xFA30 . #xFA6A)
3407                     (#xFA70 . #xFAD9)
3408                     (#xFB00 . #xFB06)
3409                     (#xFB13 . #xFB17)
3410                     #xFB1D
3411                     #xFB1E
3412                     (#xFB1F . #xFB28)
3413                     (#xFB2A . #xFB36)
3414                     (#xFB38 . #xFB3C)
3415                     #xFB3E
3416                     (#xFB40 . #xFB41)
3417                     (#xFB43 . #xFB44)
3418                     (#xFB46 . #xFBB1)
3419                     (#xFBD3 . #xFD3D)
3420                     (#xFD50 . #xFD8F)
3421                     (#xFD92 . #xFDC7)
3422                     (#xFDF0 . #xFDFB)
3423                     (#xFE70 . #xFE74)
3424                     (#xFE76 . #xFEFC)
3425                     (#xFF21 . #xFF3A)
3426                     (#xFF41 . #xFF5A)
3427                     (#xFF66 . #xFF6F)
3428                     #xFF70
3429                     (#xFF71 . #xFF9D)
3430                     (#xFF9E . #xFF9F)
3431                     (#xFFA0 . #xFFBE)
3432                     (#xFFC2 . #xFFC7)
3433                     (#xFFCA . #xFFCF)
3434                     (#xFFD2 . #xFFD7)
3435                     (#xFFDA . #xFFDC)
3436                     (#x10000 . #x1000B)
3437                     (#x1000D . #x10026)
3438                     (#x10028 . #x1003A)
3439                     (#x1003C . #x1003D)
3440                     (#x1003F . #x1004D)
3441                     (#x10050 . #x1005D)
3442                     (#x10080 . #x100FA)
3443                     (#x10140 . #x10174)
3444                     (#x10280 . #x1029C)
3445                     (#x102A0 . #x102D0)
3446                     (#x10300 . #x1031E)
3447                     (#x10330 . #x10340)
3448                     #x10341
3449                     (#x10342 . #x10349)
3450                     #x1034A
3451                     (#x10380 . #x1039D)
3452                     (#x103A0 . #x103C3)
3453                     (#x103C8 . #x103CF)
3454                     (#x103D1 . #x103D5)
3455                     (#x10400 . #x1044F)
3456                     (#x10450 . #x1049D)
3457                     (#x10800 . #x10805)
3458                     #x10808
3459                     (#x1080A . #x10835)
3460                     (#x10837 . #x10838)
3461                     #x1083C
3462                     #x1083F
3463                     (#x10900 . #x10915)
3464                     (#x10920 . #x10939)
3465                     #x10A00
3466                     (#x10A01 . #x10A03)
3467                     (#x10A05 . #x10A06)
3468                     (#x10A0C . #x10A0F)
3469                     (#x10A10 . #x10A13)
3470                     (#x10A15 . #x10A17)
3471                     (#x10A19 . #x10A33)
3472                     (#x12000 . #x1236E)
3473                     (#x12400 . #x12462)
3474                     (#x1D400 . #x1D454)
3475                     (#x1D456 . #x1D49C)
3476                     (#x1D49E . #x1D49F)
3477                     #x1D4A2
3478                     (#x1D4A5 . #x1D4A6)
3479                     (#x1D4A9 . #x1D4AC)
3480                     (#x1D4AE . #x1D4B9)
3481                     #x1D4BB
3482                     (#x1D4BD . #x1D4C3)
3483                     (#x1D4C5 . #x1D505)
3484                     (#x1D507 . #x1D50A)
3485                     (#x1D50D . #x1D514)
3486                     (#x1D516 . #x1D51C)
3487                     (#x1D51E . #x1D539)
3488                     (#x1D53B . #x1D53E)
3489                     (#x1D540 . #x1D544)
3490                     #x1D546
3491                     (#x1D54A . #x1D550)
3492                     (#x1D552 . #x1D6A5)
3493                     (#x1D6A8 . #x1D6C0)
3494                     (#x1D6C2 . #x1D6DA)
3495                     (#x1D6DC . #x1D6FA)
3496                     (#x1D6FC . #x1D714)
3497                     (#x1D716 . #x1D734)
3498                     (#x1D736 . #x1D74E)
3499                     (#x1D750 . #x1D76E)
3500                     (#x1D770 . #x1D788)
3501                     (#x1D78A . #x1D7A8)
3502                     (#x1D7AA . #x1D7C2)
3503                     (#x1D7C4 . #x1D7CB)
3504                     (#x20000 . #x2A6D6)
3505                     (#x2F800 . #x2FA1D))
3506             bits)
3507      (let* ((low (if (atom range) range (car range)))
3508             (high (1+ (if (atom range) range (cdr range)))))
3509        (do* ((i low (1+ i)))
3510             ((= i high))
3511          (setf (sbit bits i) 1))))))
3512
3513
3514(defun alpha-char-p (c)
3515  "The argument must be a character object. ALPHA-CHAR-P returns T if the
3516   argument is an alphabetic character; otherwise NIL."
3517  (let* ((code (char-code c))
3518         (bits *alpha-char-bits*))
3519    (declare (type (mod #x110000) code)
3520             (simple-bit-vector bits))
3521    (and (< code (length bits))
3522         (not (eql 0 (sbit bits code))))))
3523
3524
3525;;; def-accessors type-tracking stuff.  Used by inspector
3526(defvar *def-accessor-types* nil)
3527
3528(defun add-accessor-types (types names)
3529  (dolist (type types)
3530    (let ((cell (or (assq type *def-accessor-types*)
3531                    (car (push (cons type nil) *def-accessor-types*)))))
3532      (setf (cdr cell) (if (vectorp names) names (%list-to-uvector nil names))))))
3533
3534
3535;;; Some simple explicit storage management for cons cells
3536
3537(def-standard-initial-binding *cons-pool* (%cons-pool nil))
3538
3539(defun cheap-cons (car cdr)
3540  (let* ((pool *cons-pool*)
3541         (cons (pool.data pool)))
3542    (if cons
3543      (locally (declare (type cons cons))
3544        (setf (pool.data pool) (cdr cons)
3545              (car cons) car
3546              (cdr cons) cdr)
3547        cons)
3548      (cons car cdr))))
3549
3550(defun free-cons (cons)
3551  (when (consp cons)
3552    (locally (declare (type cons cons))
3553      (setf (car cons) nil
3554            (cdr cons) nil)
3555      (let* ((pool *cons-pool*)
3556             (freelist (pool.data pool)))
3557        (setf (pool.data pool) cons
3558              (cdr cons) freelist)))))
3559
3560(defun cheap-copy-list (list)
3561  (let ((l list)
3562        res)
3563    (loop
3564      (when (atom l)
3565        (return (nreconc res l)))
3566      (setq res (cheap-cons (pop l) res)))))
3567
3568(defun cheap-list (&rest args)
3569  (declare (dynamic-extent args))
3570  (cheap-copy-list args))
3571
3572;;; Works for dotted lists
3573(defun cheap-free-list (list)
3574  (let ((l list)
3575        next-l)
3576    (loop
3577      (setq next-l (cdr l))
3578      (free-cons l)
3579      (when (atom (setq l next-l))
3580        (return)))))
3581
3582(defmacro pop-and-free (place)
3583  (setq place (require-type place 'symbol))     ; all I need for now.
3584  (let ((list (gensym))
3585        (cdr (gensym)))
3586    `(let* ((,list ,place)
3587            (,cdr (cdr ,list)))
3588       (prog1
3589         (car ,list)
3590         (setf ,place ,cdr)
3591         (free-cons ,list)))))
3592
3593;;; Support for defresource & using-resource macros
3594(defun make-resource (constructor &key destructor initializer)
3595  (%cons-resource constructor destructor initializer))
3596
3597(defun allocate-resource (resource)
3598  (setq resource (require-type resource 'resource))
3599  (with-lock-grabbed ((resource.lock resource))
3600    (let ((pool (resource.pool resource))
3601          res)
3602      (let ((data (pool.data pool)))
3603        (when data
3604          (setf res (car data)
3605                (pool.data pool) (cdr (the cons data)))
3606          (free-cons data)))
3607      (if res
3608        (let ((initializer (resource.initializer resource)))
3609          (when initializer
3610            (funcall initializer res)))
3611        (setq res (funcall (resource.constructor resource))))
3612      res)))
3613
3614(defun free-resource (resource instance)
3615  (setq resource (require-type resource 'resource))
3616  (with-lock-grabbed ((resource.lock resource))
3617    (let ((pool (resource.pool resource))
3618          (destructor (resource.destructor resource)))
3619      (when destructor
3620        (funcall destructor instance))
3621      (setf (pool.data pool)
3622            (cheap-cons instance (pool.data pool)))))
3623  resource)
3624
3625(defun valid-char-code-p (code)
3626  (and (typep code 'fixnum)
3627       (locally (declare (fixnum code))
3628         (and 
3629          (>= code 0)
3630          (< code #x110000)
3631          (or (< code #xfffe)
3632              (> code #xffff))
3633          (or (< code #xd800)
3634              (> code #xdfff))))))
3635
3636
3637(defpackage #.(ftd-interface-package-name
3638               (backend-target-foreign-type-data *target-backend*))
3639  (:nicknames "OS")
3640  (:use "COMMON-LISP"))
3641
3642
3643
3644
3645
3646
Note: See TracBrowser for help on using the repository browser.