source: branches/ia32/level-1/l1-aprims.lisp @ 8901

Last change on this file since 8901 was 8901, checked in by rme, 13 years ago

x8632 conditionalization

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