~ chicken-core (chicken-5) 51deb37e07819e04f480bf390857f97ab29bac98


commit 51deb37e07819e04f480bf390857f97ab29bac98
Author:     megane <meganeka@gmail.com>
AuthorDate: Sat May 22 07:47:53 2021 +0300
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Fri Jul 30 13:13:07 2021 +1200

    FFI: Make scrutinizer not allow #t where nullable value is expected
    
    E.g. annotate (foreign-lambda* void ((blob x)) "return;") with
    
      ((or false blob) -> undefined)
    
    instead of current
    
      ((or boolean blob) -> undefined)
    
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/support.scm b/support.scm
index b56b7d00..19702271 100644
--- a/support.scm
+++ b/support.scm
@@ -1363,17 +1363,17 @@
 	  ((scheme-pointer nonnull-scheme-pointer) '*)
 	  ((blob)
 	   (case mode
-	     ((arg) '(or boolean blob))
+	     ((arg) '(or false blob))
 	     (else 'blob)))
 	  ((nonnull-blob) 'blob)
 	  ((pointer-vector)
 	   (case mode
-	     ((arg) '(or boolean pointer-vector))
+	     ((arg) '(or false pointer-vector))
 	     (else 'pointer-vector)))
 	  ((nonnull-pointer-vector) 'pointer-vector)
 	  ((u8vector u16vector s8vector s16vector u32vector s32vector u64vector s64vector f32vector f64vector)
 	   (case mode
-	     ((arg) `(or boolean (struct ,ft)))
+	     ((arg) `(or false (struct ,ft)))
 	     (else `(struct ,ft))))
 	  ((nonnull-u8vector) '(struct u8vector))
 	  ((nonnull-s8vector) '(struct s8vector))
@@ -1389,10 +1389,10 @@
 		    unsigned-long)
 	   'integer)
 	  ((c-pointer)
-	   '(or boolean pointer locative))
+	   '(or false pointer locative))
 	  ((nonnull-c-pointer) 'pointer)
 	  ((c-string c-string* unsigned-c-string unsigned-c-string*)
-	   '(or boolean string))
+	   '(or false string))
 	  ((c-string-list c-string-list*)
 	   '(list-of string))
 	  ((nonnull-c-string nonnull-c-string* nonnull-unsigned-c-string*) 'string)
@@ -1401,7 +1401,7 @@
 	   (cond ((pair? t)
 		  (case (car t)
 		    ((ref pointer function c-pointer)
-		     '(or boolean pointer locative))
+		     '(or false pointer locative))
 		    ((const) (foreign-type->scrutiny-type (cadr t) mode))
 		    ((enum) 'integer)
 		    ((nonnull-pointer nonnull-c-pointer) 'pointer)
Trap