~ chicken-core (chicken-5) d0f778ec0f9c3c0b8e68a3025dca5459b1d726b6
commit d0f778ec0f9c3c0b8e68a3025dca5459b1d726b6
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Aug 10 15:36:46 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Wed Aug 10 15:36:46 2011 +0200
hackish non-solution for specialization-matching of complex types
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 5672d3ed..9428daa6 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -1195,11 +1195,14 @@
(print "; END OF FILE"))))
(define (match-specialization typelist atypes exact)
- ;; - does not accept complex procedure types in typelist!
+ ;; - does not accept complex procedure or list/vector/pair types in typelist!
;; - "exact" means: "or"-type in atypes is not allowed
- ;;XXX doesn't handle complex "list", "pair" and "vector" types
(define (match st t)
(cond ((eq? st t))
+ ((and (pair? t) (memq (car t) '(vector list)))
+ (match st (car t))) ;XXX hack, insufficient
+ ((and (pair? t) (eq? 'pair (car t)))
+ (match st 'pair)) ;XXX same here
((pair? st)
(case (car st)
((not) (matchnot (cadr st) t))
@@ -1221,6 +1224,10 @@
(else (equal? st t))))
(define (matchnot st t)
(cond ((eq? st t) #f)
+ ((and (pair? t) (memq (car t) '(vector list)))
+ (match st (car t))) ;XXX hack, insufficient
+ ((and (pair? t) (eq? 'pair (car t)))
+ (match st 'pair)) ;XXX same here
((eq? 'list t) (matchnot st '(or null pair)))
((eq? 'number t) (matchnot st '(or fixnum float)))
((eq? '* t) #f)
Trap