source: branches/working-0710/ccl/level-1/l1-aprims.lisp @ 7690

Last change on this file since 7690 was 7690, checked in by gb, 14 years ago

Standard initial bindings for CCL::*LOCKS-HELD*, *LOCKS-PENDING*,
*LOCK-CONSES*. MAKE-LIST moved to level-0.

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