source: release/1.6/source/level-1/l1-aprims.lisp

Last change on this file was 14119, checked in by gb, 9 years ago

Changes from ARM branch. Need testing ...

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