~ chicken-core (chicken-5) 04fb8aa6879e8d7d9cea471563bee7f051aba231
commit 04fb8aa6879e8d7d9cea471563bee7f051aba231 Author: Evan Hanson <evhan@foldling.org> AuthorDate: Sat Dec 28 19:47:19 2013 +1300 Commit: Peter Bex <peter.bex@xs4all.nl> CommitDate: Thu Jan 9 21:12:17 2014 +0100 Add null guards and fix empty list rewriting in (pair a b) <-> (list ...) type comparisons This makes sure type comparisons between (pair ...) and (list ...) forms don't fall off the end of the list, causing unhelpful errors about calling cadr/caddr on null. Signed-off-by: Peter Bex <peter.bex@xs4all.nl> diff --git a/scrutinizer.scm b/scrutinizer.scm index 91a8f69b..0cdd4f23 100644 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -1158,9 +1158,10 @@ (match1 ct1 t2) #t))) ; inexact match ((list) - (and (match1 (second t1) (second t2)) + (and (pair? (cdr t2)) + (match1 (second t1) (second t2)) (match1 (third t1) - (if (null? (cdr t2)) + (if (null? (cddr t2)) 'null `(list ,@(cddr t2)))))) (else #f)))) @@ -1173,8 +1174,9 @@ (match1 t1 ct2) (and (not exact) (not all))))) ; inexact mode: ok ((list) - (and (match1 (second t1) (second t2)) - (match1 (if (null? (cdr t1)) + (and (pair? (cdr t1)) + (match1 (second t1) (second t2)) + (match1 (if (null? (cddr t1)) 'null `(list ,@(cddr t1))) (third t2))))Trap