~ chicken-r7rs (master) 512aecce2618e5c64db80dbcc5ca3c46359b6cf8


commit 512aecce2618e5c64db80dbcc5ca3c46359b6cf8
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Thu Oct 24 22:11:56 2013 +0000
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Thu Oct 24 22:11:56 2013 +0000

    Stub scheme.char, add char-ci*? & string-ci*? comparators

diff --git a/r7rs.setup b/r7rs.setup
index b152b3d..a8926c3 100644
--- a/r7rs.setup
+++ b/r7rs.setup
@@ -4,7 +4,7 @@
 (use make srfi-1)
 
 (define scheme-modules
-  '("process-context" "eval" "cxr" "complex" "inexact" "load" "file" "read"))	;XXX
+  '("process-context" "eval" "cxr" "complex" "inexact" "load" "file" "read" "char"))	;XXX
 
 (make (("r7rs-compile-time.so" ("r7rs-compile-time.scm" "r7rs-compile-time-module.scm")
 	(compile -s -O3 -d1 r7rs-compile-time-module.scm -J -o r7rs-compile-time.so)
diff --git a/scheme.char.scm b/scheme.char.scm
new file mode 100644
index 0000000..3c1db5d
--- /dev/null
+++ b/scheme.char.scm
@@ -0,0 +1,52 @@
+(module scheme.char (char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=?
+		     string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?)
+
+(import
+  (except scheme
+	  char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=?
+	  string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?)
+  (prefix
+    (only scheme
+	  char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=?
+	  string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?)
+    %))
+
+(import chicken)
+
+;; Copy-pasta from scheme.base.scm.
+(define-syntax define-extended-arity-comparator
+  (syntax-rules ()
+    ((_ name comparator check-type)
+     (define name
+       (let ((c comparator))
+         (lambda (o1 o2 . os)
+           (check-type o1 'name)
+           (let lp ((o1 o1) (o2 o2) (os os) (eq #t))
+             (check-type o2 'name)
+             (if (null? os)
+                 (and eq (c o1 o2))
+                 (lp o2 (car os) (cdr os) (and eq (c o1 o2)))))))))))
+
+(: char-ci=? (char char #!rest char -> boolean))
+(: char-ci<? (char char #!rest char -> boolean))
+(: char-ci>? (char char #!rest char -> boolean))
+(: char-ci<=? (char char #!rest char -> boolean))
+(: char-ci>=? (char char #!rest char -> boolean))
+
+(define-extended-arity-comparator char-ci=? %char-ci=? ##sys#check-char)
+(define-extended-arity-comparator char-ci<? %char-ci<? ##sys#check-char)
+(define-extended-arity-comparator char-ci>? %char-ci>? ##sys#check-char)
+(define-extended-arity-comparator char-ci<=? %char-ci<=? ##sys#check-char)
+(define-extended-arity-comparator char-ci>=? %char-ci>=? ##sys#check-char)
+
+(: string-ci=? (string string #!rest string -> boolean))
+(: string-ci<? (string string #!rest string -> boolean))
+(: string-ci>? (string string #!rest string -> boolean))
+(: string-ci<=? (string string #!rest string -> boolean))
+(: string-ci>=? (string string #!rest string -> boolean))
+
+(define-extended-arity-comparator string-ci=? %string-ci=? ##sys#check-string)
+(define-extended-arity-comparator string-ci<? %string-ci<? ##sys#check-string)
+(define-extended-arity-comparator string-ci>? %string-ci>? ##sys#check-string)
+(define-extended-arity-comparator string-ci<=? %string-ci<=? ##sys#check-string)
+(define-extended-arity-comparator string-ci>=? %string-ci>=? ##sys#check-string))
Trap