+ (flet ((base-char-equal-p ()
+ (let* ((code1 (char-code c1))
+ (code2 (char-code c2))
+ (sum (logxor code1 code2)))
+ (when (eql sum #x20)
+ (let ((sum (+ code1 code2)))
+ (or (and (> sum 161) (< sum 213))
+ (and (> sum 415) (< sum 461))
+ (and (> sum 463) (< sum 477))))))))
+ (declare (inline base-char-equal-p))
+ (or (eq c1 c2)
+ #!-sb-unicode
+ (base-char-equal-p)
+ #!+sb-unicode
+ (typecase c1
+ (base-char
+ (and (base-char-p c2)
+ (base-char-equal-p)))
+ (t
+ (= (equal-char-code c1) (equal-char-code c2)))))))
+
+(defun char-equal-constant (x char reverse-case-char)
+ (declare (type character x))
+ (or (eq char x)
+ (eq reverse-case-char x)))