(defun two-arg-char-equal (c1 c2)
(or (eq c1 c2)
- (= (equal-char-code c1) (equal-char-code c2))))
+ (typecase c1
+ (base-char
+ (and (base-char-p c2)
+ (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))))))))
+ (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)))
(defun char-equal (character &rest more-characters)
#!+sb-doc