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

Last change on this file since 11101 was 11101, checked in by gz, 13 years ago

Another round of changes from the trunk, mostly just mods in internal mechanisms in support of various recent ports.

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