~ chicken-core (chicken-5) b671f5db5832d28d0f43c5236624e3f5f0d26ca6
commit b671f5db5832d28d0f43c5236624e3f5f0d26ca6 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Apr 5 15:17:59 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Apr 5 15:17:59 2011 +0200 scrutiny bugfix and types.db predicate fixes for list-predicates diff --git a/scrutinizer.scm b/scrutinizer.scm index c3eb0470..023c5974 100755 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -521,7 +521,7 @@ (report loc (sprintf - "~apredicate is called with an argument of type `~a' and will always return true" + "~athe predicate is called with an argument of type `~a' and will always return true" (pname) pt)) (specialize-node! node @@ -531,8 +531,8 @@ (report loc (sprintf - "~apredicate is called with an argument of type `~a' and will always return false" - (pname) (car args))) + "~athe predicate is called with an argument of type `~a' and will always return false" + (pname) (cadr args))) (specialize-node! node `(let ((#:tmp #(1))) '#f)) @@ -814,8 +814,10 @@ (read-file dbfile)))) (define (match-specialization typelist atypes) + ;; does not accept complex procedure types in typelist! (define (match st t) - (cond ((pair? st) + (cond ((eq? st t)) + ((pair? st) (case (car st) ((not) (cond ((and (pair? t) (eq? 'or (car t))) @@ -830,7 +832,7 @@ (or (eq? t 'procedure) (and (pair? t) (eq? 'procedure (car t))))) ;;XXX match number with fixnum and float? - (else (eq? st t)))) + (else #f))) (let loop ((tl typelist) (atypes atypes)) (cond ((null? tl) (null? atypes)) ((null? atypes) #f) diff --git a/types.db b/types.db index 8597621b..e92875f1 100644 --- a/types.db +++ b/types.db @@ -55,8 +55,9 @@ (((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2))) ((* (or fixnum symbol char eof null undefined) (eq? #(1) #(2))))) -(pair? (procedure pair? (*) boolean)) -(predicate pair? pair) +(pair? (procedure pair? (*) boolean) + ((pair) (let ((#:tmp #(1))) '#t)) + (((and (not pair) (not list))) (let ((#:tmp #(1))) '#f))) (cons (procedure cons (* *) pair)) @@ -95,9 +96,10 @@ (set-car! (procedure! set-car! (pair *) undefined) ((pair *) (##sys#setslot #(1) '0 #(2)))) (set-cdr! (procedure! set-cdr! (pair *) undefined) ((pair *) (##sys#setslot #(1) '1 #(2)))) -(null? (procedure null? (*) boolean)) -(predicate null? null) - +(null? (procedure null? (*) boolean) + ((null) (let ((#:tmp #(1))) '#t)) + (((and (not list) (not null))) (let ((#:tmp #(1))) '#f))) + (list? (procedure list? (*) boolean) (((or null pair list)) (let ((#:tmp #(1))) '#t)) (((not (or null pair list))) (let ((#:tmp #(1))) '#f)))Trap