~ chicken-core (chicken-5) 90dd06cb5930974f1b8532bdbbe63f6bbbd01e75


commit 90dd06cb5930974f1b8532bdbbe63f6bbbd01e75
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Mar 19 20:40:59 2011 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sat Mar 19 20:40:59 2011 +0100

    scrutiny/specialization bugfixes

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index a32478bf..5e8879d7 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -1117,16 +1117,17 @@
  (##sys#er-transformer
   (lambda (x r c)
     (##sys#check-syntax ': x '(_ symbol _ . _))
-    (let* ((name (##sys#globalize (cadr x)))
-	   (type1 (##sys#strip-syntax (caddr x)))
-	   (name1 (##sys#strip-syntax (cadr x)))
-	   (type (validate-type type1 name1)))
-      (cond ((not type)
-	     (syntax-error ': "invalid type syntax" name1 type1))
-	    ((memq #:csi ##sys#features) '(##core#undefined))
-	    (else
-	     `(##core#declare 
-	       (type (,name ,type ,@(cdddr x))))))))))
+    (if (memq #:csi ##sys#features) 
+	'(##core#undefined)
+	(let* ((name (cadr x))
+	       (type1 (##sys#strip-syntax (caddr x)))
+	       (name1 (##sys#strip-syntax (cadr x)))
+	       (type (##compiler#validate-type type1 name1)))
+	  (cond ((not type)
+		 (syntax-error ': "invalid type syntax" name1 type1))
+		(else
+		 `(##core#declare 
+		   (type (,name ,type ,@(cdddr x)))))))))))
 
 
 (##sys#macro-subset me0 ##sys#default-macro-environment)))
diff --git a/compiler-namespace.scm b/compiler-namespace.scm
index 718a7876..6246570f 100644
--- a/compiler-namespace.scm
+++ b/compiler-namespace.scm
@@ -289,10 +289,10 @@
  update-line-number-database
  update-line-number-database!
  used-units
- validate-type
  valid-c-identifier?
  valid-compiler-options
  valid-compiler-options-with-argument
+ validate-type
  variable-mark
  variable-visible?
  varnode
diff --git a/compiler.scm b/compiler.scm
index b7245a3e..593026dc 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -1470,7 +1470,7 @@
 			 (>= 2 (length spec))
 			 (symbol? (car spec))))
 	       (warning "illegal type declaration" (##sys#strip-syntax spec))
-	       (let ((name (##sys#globalize (car spec)))
+	       (let ((name (##sys#globalize (car spec) se))
 		     (type (##sys#strip-syntax (cadr spec))))
 		 (cond ((validate-type type name)
 			(mark-variable name '##core#type type)
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 3907ddd5..357507c2 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -794,21 +794,19 @@
 		       (let ((ts (validate-llist (car t2))))
 			 (and ts
 			      (every identity ts)
-			      (let ((rt (if (eq? '* (cddr t2))
-					    (cddr t2)
-					    (and (list? (cddr t2))
-						 (let ((rts
-							(map
-							 validate
-							 (cddr t2))))
-						   (and (every identity rts)
-							rts))))))
+			      (let* ((rt2 (cdr t2))
+				     (rt (if (eq? '* rt2) 
+					     rt2
+					     (and (list? rt2)
+						  (let ((rts (map validate rt2)))
+						    (and (every identity rts)
+							 rts))))))
 				(and rt
 				     `(procedure 
 				       ,@(if name (list name) '())
 				       ,ts
 				       ,@rt)))))))))
-	  ((and (pair? (cdr t)) (memq '-> (cadr t))) =>
+	  ((and (pair? (cdr t)) (memq '-> (cdr t))) =>
 	   (lambda (p)
 	     (validate
 	      `(procedure ,(upto t p) ,@(cdr p)))))
Trap