~ chicken-core (chicken-5) 8efd0784e189c0fe0434a5e1d16c25cff4c827e0


commit 8efd0784e189c0fe0434a5e1d16c25cff4c827e0
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Oct 4 20:34:08 2012 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Oct 4 20:34:08 2012 +0200

    scrutinizer and types.db fixes by sjamaan
    
    Signed-off-by: felix <felix@call-with-current-continuation.org>

diff --git a/scrutinizer.scm b/scrutinizer.scm
index a08d2ea0..3ed4753d 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -1035,6 +1035,9 @@
 		    #t)
 		   (else #f))))
 	  ((eq? t1 '*))
+	  ((eq? t2 '*) (and (not exact) (not all)))
+	  ((eq? t1 'undefined) #f)
+	  ((eq? t2 'undefined) #f)
 	  ((and (pair? t1) (eq? 'not (car t1)))
 	   (fluid-let ((exact #f)
 		       (all #f))
@@ -1067,7 +1070,6 @@
 	   (match1 (third t1) t2)) ; assumes typeenv has already been extracted
 	  ((and (pair? t2) (eq? 'forall (car t2)))
 	   (match1 t1 (third t2))) ; assumes typeenv has already been extracted
-	  ((eq? t2 '*) (and (not exact) (not all)))
 	  ((eq? t1 'noreturn) (not exact))
 	  ((eq? t2 'noreturn) (not exact))
 	  ((eq? t1 'number) 
diff --git a/tests/specialization-test-1.scm b/tests/specialization-test-1.scm
index 01574204..37e8d6bb 100644
--- a/tests/specialization-test-1.scm
+++ b/tests/specialization-test-1.scm
@@ -41,4 +41,10 @@ return n;}
   (set-cdr! x x)
   (assert (not (list? x))))
 
+;(define (some-proc x y) (if (string->number y) (set-cdr! x x) x))
+;(assert (null? (some-proc (list) "invalid number syntax")))
+
+(assert (null? (the (or undefined *) (list))))
+
+
 )
diff --git a/types.db b/types.db
index 050af879..cda90f82 100644
--- a/types.db
+++ b/types.db
@@ -783,9 +783,10 @@
 (enable-warnings (#(procedure #:clean) enable-warnings (#!optional *) *))
 
 (equal=? (#(procedure #:clean) equal=? (* *) boolean)
-	 (((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2)))
-	 ((* (or fixnum symbol char eof null undefined)) (eq? #(1) #(2)))
-	 (((or float number) (or float number)) (= #(1) #(2))))
+	 ((fixnum fixnum) (eq? #(1) #(2)))
+	 (((or symbol char eof null) *) (eq? #(1) #(2)))
+	 ((* (or symbol char eof null undefined)) (eq? #(1) #(2)))
+	 (((or float fixnum number) (or float fixnum number)) (= #(1) #(2))))
 
 (er-macro-transformer
  (#(procedure #:clean #:enforce) 
Trap