~ chicken-core (chicken-5) 9c0c03e02c83f2a868e96bd19607c51c0f1ee0f0
commit 9c0c03e02c83f2a868e96bd19607c51c0f1ee0f0
Author: megane <meganeka@gmail.com>
AuthorDate: Mon Nov 19 11:18:51 2018 +0200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Sat Mar 9 20:28:18 2019 +1300
Print types in scrutinizer messages with pretty-print
Using `pp' to print types starts to shine when you're getting bigger
list, vector or procedure types.
Also, try to always print a relevant code fragment. This helps to find
the actual code the warning is originating from, or help debug the issue
when the actual code is just a macro call.
Signed-off-by: Evan Hanson <evhan@foldling.org>
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 988f56cc..c4bb70b5 100644
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -154,12 +154,6 @@
(define-inline (value-type? t)
(or (struct-type? t) (memq t value-types)))
-(define (type-name x)
- (let ((t (strip-syntax x)))
- (if (refinement-type? t)
- (sprintf "~a-~a" (string-intersperse (map conc (second t)) "/") (third t))
- (sprintf "~a" t))))
-
(define specialization-statistics '())
(define trail '())
@@ -180,13 +174,13 @@
(when *complain?*
(##sys#notice
(conc (location-name loc)
- (sprintf "~?" msg (map type-name args))))))
+ (sprintf "~?" msg args)))))
(define (report loc msg . args)
(when *complain?*
(warning
(conc (location-name loc)
- (sprintf "~?" msg (map type-name args))))))
+ (sprintf "~?" msg args)))))
(set! *complain?* complain)
@@ -278,12 +272,12 @@
(define (always-true if-node test-node t loc)
(and-let* ((_ (always-true1 t)))
- (r-cond-test-always-true loc test-node t if-node)
+ (r-cond-test-always-true loc if-node test-node t)
#t))
(define (always-false if-node test-node t loc)
(and-let* ((_ (eq? t 'false)))
- (r-cond-test-always-false loc test-node if-node)
+ (r-cond-test-always-false loc if-node test-node)
#t))
(define (always-immediate var t loc)
@@ -319,9 +313,7 @@
(define (call-result node args e loc params typeenv)
(define (pname)
- (sprintf "~ain procedure call to `~s', "
- (node-source-prefix node)
- (fragment (first (node-subexpressions node)))))
+ (fragment (first (node-subexpressions node))))
(let* ((actualtypes (map walked-result args))
(ptype (car actualtypes))
(pptype? (procedure-type? ptype))
@@ -332,13 +324,13 @@
(d " call: ~a, te: ~a" actualtypes typeenv)
(cond ((and (not pptype?) (not (match-types xptype ptype typeenv)))
(r-invalid-called-procedure-type
- loc (pname) (resolve xptype typeenv) (resolve ptype typeenv))
+ loc node (resolve xptype typeenv) (resolve ptype typeenv))
(values '* #f))
(else
(let-values (((atypes values-rest ok alen)
(procedure-argument-types ptype nargs typeenv)))
(unless ok
- (r-proc-call-argument-count-mismatch loc (pname) alen nargs))
+ (r-proc-call-argument-count-mismatch loc node (pname) alen nargs ptype))
(do ((actualtypes (cdr actualtypes) (cdr actualtypes))
(atypes atypes (cdr atypes))
(i 1 (add1 i)))
@@ -348,9 +340,10 @@
(car actualtypes)
typeenv)
(r-proc-call-argument-type-mismatch
- loc (pname) i
+ loc node (pname) i
(resolve (car atypes) typeenv)
- (resolve (car actualtypes) typeenv))))
+ (resolve (car actualtypes) typeenv)
+ ptype)))
(when (noreturn-procedure-type? ptype)
(set! noreturn #t))
(let ((r (procedure-result-types ptype values-rest (cdr actualtypes) typeenv)))
@@ -361,7 +354,8 @@
(variable-mark pn '##compiler#predicate)) =>
(lambda (pt)
(cond ((match-argument-types (list pt) (cdr actualtypes) typeenv)
- (r-pred-call-always-true loc (pname) (cadr actualtypes))
+ (r-pred-call-always-true
+ loc node (pname) pt (cadr actualtypes))
(when specialize
(specialize-node!
node (cdr args)
@@ -371,7 +365,8 @@
((begin
(trail-restore trail0 typeenv)
(match-argument-types (list `(not ,pt)) (cdr actualtypes) typeenv))
- (r-pred-call-always-false loc (pname) (cadr actualtypes))
+ (r-pred-call-always-false
+ loc node (pname) pt (cadr actualtypes))
(when specialize
(specialize-node!
node (cdr args)
@@ -502,7 +497,7 @@
;;(dd " branches: ~s:~s / ~s:~s" nor1 r1 nor2 r2)
(cond ((and (not nor1) (not nor2)
(not (= (length r1) (length r2))))
- (r-cond-branch-value-count-mismatch loc n)
+ (r-cond-branch-value-count-mismatch loc n c a r1 r2)
'*)
(nor1 r2)
(nor2 r1)
@@ -602,7 +597,7 @@
(eq? (car type) 'deprecated))))
(not (match-types type rt typeenv)))
(when strict (set! errors #t))
- (r-toplevel-var-assignment-type-mismatch loc rt var type))
+ (r-toplevel-var-assignment-type-mismatch loc n rt var type (first subs)))
(when (and (not type) ;XXX global declaration could allow this
(not b)
(not (eq? '* rt))
@@ -765,14 +760,14 @@
(let ((t (first params))
(rt (walk (first subs) e loc dest tail flow ctags)))
(cond ((eq? rt '*))
- ((null? rt) (r-zero-values-for-the loc t))
+ ((null? rt) (r-zero-values-for-the loc (first subs) t))
(else
(when (> (length rt) 1)
- (r-too-many-values-for-the loc rt))
+ (r-too-many-values-for-the loc (first subs) t rt))
(when (and (second params)
(not (compatible-types? t (first rt))))
(when strict (set! errors #t))
- (r-type-mismatch-in-the loc (first rt) t))))
+ (r-type-mismatch-in-the loc (first subs) (first rt) t))))
(list t)))
((##core#typecase)
(let* ((ts (walk (first subs) e loc #f #f flow ctags))
@@ -1646,17 +1641,20 @@
(let-values (((t pred pure) (validate-type new name)))
(unless t
(warning
- (sprintf "invalid type specification for `~a': ~a"
+ (sprintf "Invalid type specification for `~a':~%~%~a"
name
- (type-name new))))
+ (type->pp-string new))))
(when (and old (not (compatible-types? old t)))
(warning
(sprintf
- "type definition for toplevel binding `~a' \
- conflicts with previously loaded type:\
- ~n New type: ~a\
- ~n Original type: ~a"
- name (type-name old) (type-name new))))
+ (string-append
+ "Declared type for toplevel binding `~a'"
+ "~%~%~a~%~%"
+ " conflicts with previously loaded type:"
+ "~%~%~a")
+ name
+ (type->pp-string new)
+ (type->pp-string old))))
(mark-variable name '##compiler#type t)
(mark-variable name '##compiler#type-source 'db)
(when specs
@@ -2080,7 +2078,7 @@
(define (report loc msg . args)
(warning
(conc (location-name loc)
- (sprintf "~?" msg (map type-name args)))))
+ (sprintf "~?" msg args))))
(define (known-length-vector-index node args loc expected-argcount)
(and-let* ((subs (node-subexpressions node))
@@ -2145,7 +2143,7 @@
(define (report loc msg . args)
(warning
(conc (location-name loc)
- (sprintf "~?" msg (map type-name args)))))
+ (sprintf "~?" msg args))))
(define (list-or-null a)
(if (null? a) 'null `(list ,@a)))
@@ -2257,7 +2255,7 @@
(define (report loc msg . args)
(warning
(conc (location-name loc)
- (sprintf "~?" msg (map type-name args)))))
+ (sprintf "~?" msg args))))
(define (append-special-case node args loc rtypes)
(define (potentially-proper-list? l) (match-types l 'list '()))
@@ -2291,12 +2289,16 @@
(unless (or (null? (cdr arg-types))
(potentially-proper-list? arg1))
(report
- loc "~ain procedure call to `~a', argument #~a is \
- of type ~a but expected a proper list"
+ loc
+ (string-append
+ "~ain procedure call to `~a', argument #~a is of type"
+ "~%~%~a~%~%"
+ " but expected a proper list.")
(node-source-prefix node)
(first (node-parameters
(first (node-subexpressions node))))
- index arg1))
+ index
+ (type->pp-string arg1)))
#f))))))
(cond ((derive-result-type) => list)
(else rtypes)))
@@ -2401,6 +2403,30 @@
(define (multiples n)
(if (= n 1) "" "s"))
+(define (string-add-indent str #!optional (indent " "))
+ (let* ((ls (string-split str "\n" #t))
+ (s (string-intersperse
+ (map (lambda (l)
+ (if (string=? "" l)
+ l
+ (string-append indent l)))
+ ls)
+ "\n")))
+ (if (eq? #\newline (string-ref str (sub1 (string-length str))))
+ (string-append s "\n")
+ s)))
+
+(define (type->pp-string t)
+ (string-add-indent
+ (string-chomp
+ (with-output-to-string
+ (lambda ()
+ (let ((t (strip-syntax t)))
+ (if (refinement-type? t)
+ (printf "~a-~a" (string-intersperse (map conc (second t)) "/") (third t))
+ (pp t))))))
+ " "))
+
(define (fragment x)
(let ((x (build-expression-tree (source-node-tree x))))
(let walk ((x x) (d 0))
@@ -2415,128 +2441,330 @@
(else (strip-syntax x))))))
(define (pp-fragment x)
- (string-chomp
- (with-output-to-string
- (lambda ()
- (pp (fragment x))))))
+ (string-add-indent
+ (string-chomp
+ (with-output-to-string
+ (lambda ()
+ (pp (fragment x)))))
+ " "))
(define (node-source-prefix n)
(let ((line (node-line-number n)))
(if (not line) "" (sprintf "(~a) " line))))
-(define (location-name loc)
+(define (location-name loc #!optional (indent " "))
(define (lname loc1)
(if loc1
- (sprintf "procedure `~a'" (real-name loc1))
- "unknown procedure"))
- (cond ((null? loc) "at toplevel:\n ")
- ((null? (cdr loc))
- (sprintf "in toplevel ~a:\n " (lname (car loc))))
- (else
- (let rec ((loc loc))
- (if (null? (cdr loc))
- (location-name loc)
- (sprintf "in local ~a,\n ~a" (lname (car loc)) (rec (cdr loc))))))))
-
-(define (report2 loc msg . args)
+ (real-name loc1)
+ "(unknown procedure)"))
+ (if (null? loc)
+ (sprintf "At toplevel\n~a" indent)
+ (let rec ((loc loc)
+ (msgs (list "")))
+ (if (null? (cdr loc))
+ (string-intersperse
+ (cons (sprintf "In `~a', a toplevel procedure" (lname (car loc))) msgs)
+ (sprintf "\n~a" indent))
+ (rec (cdr loc)
+ (cons (sprintf "In `~a', a local procedure" (lname (car loc))) msgs))))))
+
+(define (report2 report-f location-node-candidates loc msg . args)
+ (define (file-location)
+ (any (lambda (n) (and (not (string=? "" (node-source-prefix n)))
+ (node-source-prefix n)))
+ location-node-candidates))
(when *complain?*
- (warning
- (conc (location-name loc)
- (sprintf "~?" msg (map type-name args))))))
+ (report-f
+ (conc
+ "Type mismatch"
+ (let ((l (file-location))) (if l (conc " " l) ""))
+ (string-add-indent
+ (conc "\n" (location-name loc "") (sprintf "~?" msg args))
+ " ")))))
-(define (report-notice2 loc msg . args)
- (when *complain?*
- (##sys#notice
- (conc (location-name loc)
- (sprintf "~?" msg (map type-name args))))))
+(define (report-notice2 location-node-candidates loc msg . args)
+ (apply report2 ##sys#notice location-node-candidates loc msg args))
;;; Reports
-(define (r-invalid-called-procedure-type loc pname xptype ptype)
+(define (r-invalid-called-procedure-type loc node xptype ptype)
(report2
+ warning
+ (list node)
loc
- "~aexpected a value of type `~a' but was given a value of type `~a'"
- pname xptype ptype))
-
-(define (r-proc-call-argument-count-mismatch loc pname exp-count argc)
+ (string-append
+ "In procedure call"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Procedure in a procedure call has invalid type"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The expected type is"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ (type->pp-string ptype)
+ (type->pp-string xptype)))
+
+(define (r-proc-call-argument-count-mismatch loc node pname exp-count argc ptype)
(report2
+ warning
+ (list node)
loc
- "~aexpected ~a argument~a but was given ~a argument~a"
+ (string-append
+ "In procedure call"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Procedure `~a' is called with ~a argument~a but ~a argument~a is expected."
+ "~%~%"
+ "The procedure's type is"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
pname
+ argc (multiples argc)
exp-count (multiples exp-count)
- argc (multiples argc)))
+ (type->pp-string ptype)))
-(define (r-proc-call-argument-type-mismatch loc pname i xptype atype)
+(define (r-proc-call-argument-type-mismatch loc node pname i xptype atype ptype)
(report2
+ warning
+ (list node)
loc
- "~aexpected argument #~a of type `~a' but was given an argument of type `~a'"
- pname i xptype atype))
+ (string-append
+ "In procedure call"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Argument #~a to procedure `~a' has invalid type"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The expected type is"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The procedure's type is"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ i
+ pname
+ (type->pp-string atype)
+ (type->pp-string xptype)
+ (type->pp-string ptype)))
-(define (r-pred-call-always-true loc pname atype)
+(define (r-pred-call-always-true loc node pname pred-type atype)
+ ;; pname is "... proc call to predicate `foo' "
(report-notice2
+ (list node)
loc
- "~athe predicate is called with an argument of type `~a' \
- and will always return true"
- pname atype))
+ (string-append
+ "In predicate call"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Predicate call will always return true."
+ "~%~%"
+ "Procedure `~a' is a predicate for"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The given argument has type"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ pname
+ (type->pp-string pred-type)
+ (type->pp-string atype)))
-(define (r-pred-call-always-false loc pname atype)
+(define (r-pred-call-always-false loc node pname pred-type atype)
(report-notice2
+ (list node)
loc
- "~athe predicate is called with an argument of type `~a' \
- and will always return false"
- pname atype))
+ (string-append
+ "In predicate call"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Predicate call will always return false."
+ "~%~%"
+ "Procedure `~a' is a predicate for"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The given argument has type"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ pname
+ (type->pp-string pred-type)
+ (type->pp-string atype)))
-(define (r-cond-test-always-true loc test-node t if-node)
+(define (r-cond-test-always-true loc if-node test-node t)
(report-notice2
- loc "~aexpected a value of type boolean in conditional, but \
- was given a value of type `~a' which is always true:~%~%~a"
- (node-source-prefix test-node) t (pp-fragment if-node)))
-
-(define (r-cond-test-always-false loc test-node if-node)
+ (list test-node if-node)
+ loc
+ (string-append
+ "In conditional expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Test condition has always true value of type"
+ "~%~%"
+ "~a")
+ (pp-fragment if-node)
+ (type->pp-string t)))
+
+(define (r-cond-test-always-false loc if-node test-node)
(report-notice2
- loc "~ain conditional, test expression will always return false:~%~%~a"
- (node-source-prefix test-node) (pp-fragment if-node)))
-
-(define (r-zero-values-for-the loc the-type)
+ (list test-node if-node)
+ loc
+ (string-append
+ "In conditional expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Test condition is always false.")
+ (pp-fragment if-node)))
+
+(define (r-zero-values-for-the loc node the-type)
;; (the t r) expects r returns exactly 1 value
(report2
+ warning
+ (list node)
loc
- "expression returns zero values but is declared to have \
- a single result of type `~a'"
- the-type))
-
-(define (r-too-many-values-for-the loc rtypes)
+ (string-append
+ "In expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Expression returns 0 values but is declared to return"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ (type->pp-string the-type)))
+
+(define (r-too-many-values-for-the loc node the-type rtypes)
(report2
+ warning
+ (list node)
loc
- "expression returns ~a values but is declared to have \
- a single result" (length rtypes)))
-
-(define (r-type-mismatch-in-the loc first-rtype the-type)
+ (string-append
+ "In expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Expression returns too many values."
+ "~%~%"
+ "The expression returns ~a values but is declared to return"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ (length rtypes)
+ (type->pp-string the-type)))
+
+(define (r-type-mismatch-in-the loc node first-rtype the-type)
(report2
+ warning
+ (list node)
loc
- "expression returns a result of type `~a' but is \
- declared to return `~a', which is not compatible"
- first-rtype the-type))
+ (string-append
+ "In expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Expression's declared and actual types do not match."
+ "~%~%"
+ "The actual type is"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The expression's declared type is"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ (type->pp-string first-rtype)
+ (type->pp-string the-type)))
(define (fail-compiler-typecase loc node atype ct-types)
+ (define (pp-type t) (string-add-indent (type->pp-string t) " "))
(quit-compiling
- "~a~ano clause applies in `compiler-typecase' for expression of type `~a':~a"
+ (string-append
+ "Type mismatch"
+ "~a"
+ "~a"
+ "In `compiler-typecase' expression"
+ "~%~%"
+ " ~a"
+ "~%~%"
+ " Tested expression in `compiler-typecase' does not match any case."
+ "~%~%"
+ " The expression has this type"
+ "~%~%"
+ "~a"
+ "~%~%"
+ " The specified type cases are these"
+ "~%~%"
+ "~a")
+ (if (string=? "" (node-source-prefix node))
+ "\n"
+ (conc " " (node-source-prefix node) "\n "))
(location-name loc)
- (node-source-prefix node)
- (type-name atype)
- (string-intersperse (map (lambda (t) (sprintf "\n ~a" (type-name t))) ct-types)
- "")))
+ (pp-fragment node)
+ (pp-type atype)
+ (string-intersperse (map pp-type ct-types) "\n\n")))
-(define (r-cond-branch-value-count-mismatch loc node)
+(define (r-cond-branch-value-count-mismatch loc node c-node a-node c-types a-types)
(report2
+ warning
+ (list a-node node)
loc
- "branches in conditional expression differ in the number of results:~%~%~a"
- (pp-fragment node)))
-
-(define (r-toplevel-var-assignment-type-mismatch loc atype var xptype)
+ (string-append
+ "In conditional expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The branches have different number of returned values."
+ "~%~%"
+ "The true branch returns ~a value~a"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The false branch returns ~a value~a"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ (length c-types) (multiples (length c-types))
+ (pp-fragment c-node)
+ (length a-types) (multiples (length a-types))
+ (pp-fragment a-node)))
+
+(define (r-toplevel-var-assignment-type-mismatch loc node atype var xptype value-node)
(report2
+ warning
+ (list node value-node)
loc
- "assignment of value of type `~a' to toplevel variable `~a' \
- does not match declared type `~a'"
- atype var xptype))
+ (string-append
+ "In assignment"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Variable `~a' is assigned invalid value."
+ "~%~%"
+ "The assigned value has type"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "The declared type of `~a' is"
+ "~%~%"
+ "~a")
+ (pp-fragment node)
+ var
+ (type->pp-string atype)
+ var
+ (type->pp-string xptype)))
)
diff --git a/tests/scrutinizer-message-format.expected b/tests/scrutinizer-message-format.expected
index 1855a5fc..986c2b16 100644
--- a/tests/scrutinizer-message-format.expected
+++ b/tests/scrutinizer-message-format.expected
@@ -5,236 +5,542 @@ Warning: literal in operator position: (1 2)
Warning: literal in operator position: (1 2)
-Warning: in toplevel procedure `r-proc-call-argument-count-mismatch':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#cons', expected 2 arguments but was given 1 argument
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-proc-call-argument-count-mismatch', a toplevel procedure
+ In procedure call
-Warning: in toplevel procedure `r-proc-call-argument-type-mismatch':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#length', expected argument #1 of type `list' but was given an argument of type `symbol'
+ (scheme#cons '())
-Warning: in toplevel procedure `r-proc-call-argument-value-count':
+ Procedure `scheme#cons' is called with 1 argument but 2 arguments is expected.
+
+ The procedure's type is
+
+ (forall (aXXX bXXX) (procedure scheme#cons (aXXX bXXX) (pair aXXX bXXX)))
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-proc-call-argument-type-mismatch', a toplevel procedure
+ In procedure call
+
+ (scheme#length 'symbol)
+
+ Argument #1 to procedure `scheme#length' has invalid type
+
+ symbol
+
+ The expected type is
+
+ list
+
+ The procedure's type is
+
+ (procedure scheme#length (list) fixnum)
+
+Warning: In `r-proc-call-argument-value-count', a toplevel procedure
(test-scrutinizer-message-format.scm:XXX) expected a single result in argument #1 of procedure call `(scheme#list (chicken.time#cpu-time))', but received 2 results
-Warning: in toplevel procedure `r-proc-call-argument-value-count':
+Warning: In `r-proc-call-argument-value-count', a toplevel procedure
(test-scrutinizer-message-format.scm:XXX) expected a single result in argument #1 of procedure call `(scheme#vector (scheme#values))', but received zero results
-Warning: in toplevel procedure `r-proc-call-argument-value-count':
+Warning: In `r-proc-call-argument-value-count', a toplevel procedure
expected a single result in `let' binding of `gXXX', but received zero results
-Warning: in toplevel procedure `r-cond-branch-value-count-mismatch':
- branches in conditional expression differ in the number of results:
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-cond-branch-value-count-mismatch', a toplevel procedure
+ In conditional expression
+
+ (if (the * 1) 1 (scheme#values 1 2))
+
+ The branches have different number of returned values.
+
+ The true branch returns 1 value
+
+ 1
-(if (the * 1) 1 (scheme#values 1 2))
+ The false branch returns 2 values
-Warning: in toplevel procedure `r-invalid-called-procedure-type':
- in procedure call to `1', expected a value of type `(procedure (*) *)' but was given a value of type `fixnum'
+ (scheme#values 1 2)
-Note: in toplevel procedure `r-pred-call-always-true':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `null' and will always return true
+Warning: Type mismatch
+ In `r-invalid-called-procedure-type', a toplevel procedure
+ In procedure call
-Note: in toplevel procedure `r-pred-call-always-false':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `fixnum' and will always return false
+ (1 2)
-Note: in toplevel procedure `r-cond-test-always-true':
- expected a value of type boolean in conditional, but was given a value of type `symbol' which is always true:
+ Procedure in a procedure call has invalid type
-(if 'symbol 1 (##core#undefined))
+ fixnum
-Note: in toplevel procedure `r-cond-test-always-false':
- in conditional, test expression will always return false:
+ The expected type is
-(if #f 1 (##core#undefined))
+ (procedure (*) *)
-Warning: in toplevel procedure `r-type-mismatch-in-the':
- expression returns a result of type `fixnum' but is declared to return `symbol', which is not compatible
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-pred-call-always-true', a toplevel procedure
+ In predicate call
+
+ (scheme#list? '())
+
+ Predicate call will always return true.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
-Warning: in toplevel procedure `r-zero-values-for-the':
- expression returns zero values but is declared to have a single result of type `symbol'
+ The given argument has type
-Warning: in toplevel procedure `r-too-many-values-for-the':
- expression returns 2 values but is declared to have a single result
+ null
-Warning: in toplevel procedure `r-too-many-values-for-the':
- expression returns a result of type `fixnum' but is declared to return `symbol', which is not compatible
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-pred-call-always-false', a toplevel procedure
+ In predicate call
-Warning: in toplevel procedure `r-toplevel-var-assignment-type-mismatch':
- assignment of value of type `fixnum' to toplevel variable `foo' does not match declared type `boolean'
+ (scheme#symbol? 1)
-Warning: in toplevel procedure `r-deprecated-identifier':
+ Predicate call will always return false.
+
+ Procedure `scheme#symbol?' is a predicate for
+
+ symbol
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch
+ In `r-cond-test-always-true', a toplevel procedure
+ In conditional expression
+
+ (if 'symbol 1 (##core#undefined))
+
+ Test condition has always true value of type
+
+ symbol
+
+Note: Type mismatch
+ In `r-cond-test-always-false', a toplevel procedure
+ In conditional expression
+
+ (if #f 1 (##core#undefined))
+
+ Test condition is always false.
+
+Warning: Type mismatch
+ In `r-type-mismatch-in-the', a toplevel procedure
+ In expression
+
+ 1
+
+ Expression's declared and actual types do not match.
+
+ The actual type is
+
+ fixnum
+
+ The expression's declared type is
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-zero-values-for-the', a toplevel procedure
+ In expression
+
+ (scheme#values)
+
+ Expression returns 0 values but is declared to return
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-too-many-values-for-the', a toplevel procedure
+ In expression
+
+ (scheme#values 1 2)
+
+ Expression returns too many values.
+
+ The expression returns 2 values but is declared to return
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `r-too-many-values-for-the', a toplevel procedure
+ In expression
+
+ (scheme#values 1 2)
+
+ Expression's declared and actual types do not match.
+
+ The actual type is
+
+ fixnum
+
+ The expression's declared type is
+
+ symbol
+
+Warning: Type mismatch
+ In `r-toplevel-var-assignment-type-mismatch', a toplevel procedure
+ In assignment
+
+ (set! foo 1)
+
+ Variable `foo' is assigned invalid value.
+
+ The assigned value has type
+
+ fixnum
+
+ The declared type of `foo' is
+
+ boolean
+
+Warning: In `r-deprecated-identifier', a toplevel procedure
use of deprecated `deprecated-foo'
-Warning: in toplevel procedure `r-deprecated-identifier':
+Warning: In `r-deprecated-identifier', a toplevel procedure
use of deprecated `deprecated-foo2' - consider `foo'
-Warning: at toplevel:
- assignment of value of type `fixnum' to toplevel variable `foo' does not match declared type `boolean'
+Warning: Type mismatch
+ At toplevel
+ In assignment
+
+ (set! foo 1)
+
+ Variable `foo' is assigned invalid value.
+
+ The assigned value has type
+
+ fixnum
+
+ The declared type of `foo' is
-Warning: in toplevel procedure `list-ref-negative-index':
+ boolean
+
+Warning: In `list-ref-negative-index', a toplevel procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list-ref', index -1 is negative, which is never valid
-Warning: in toplevel procedure `list-ref-out-of-range':
+Warning: In `list-ref-out-of-range', a toplevel procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list-ref', index 1 out of range for proper list of length 0
-Warning: in toplevel procedure `vector-ref-out-of-range':
+Warning: In `vector-ref-out-of-range', a toplevel procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#vector-ref', index -1 out of range for vector of length 0
-Warning: in toplevel procedure `zero-values-for-let':
+Warning: In `zero-values-for-let', a toplevel procedure
expected a single result in `let' binding of `a', but received zero results
-Warning: in toplevel procedure `multiple-values-for-let':
+Warning: In `multiple-values-for-let', a toplevel procedure
expected a single result in `let' binding of `a', but received 2 results
-Warning: in toplevel procedure `zero-values-for-conditional':
+Warning: In `zero-values-for-conditional', a toplevel procedure
expected a single result in conditional, but received zero results
-Warning: in toplevel procedure `multiple-values-for-conditional':
+Warning: In `multiple-values-for-conditional', a toplevel procedure
expected a single result in conditional, but received 2 results
-Note: in toplevel procedure `multiple-values-for-conditional':
- (test-scrutinizer-message-format.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `fixnum' which is always true:
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `multiple-values-for-conditional', a toplevel procedure
+ In conditional expression
+
+ (if (scheme#values 1 2) 1 (##core#undefined))
+
+ Test condition has always true value of type
+
+ fixnum
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-proc-call-argument-count-mismatch', a local procedure
+ In procedure call
+
+ (scheme#cons '())
+
+ Procedure `scheme#cons' is called with 1 argument but 2 arguments is expected.
+
+ The procedure's type is
+
+ (forall (aXXX bXXX) (procedure scheme#cons (aXXX bXXX) (pair aXXX bXXX)))
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-proc-call-argument-type-mismatch', a local procedure
+ In procedure call
-(if (scheme#values 1 2) 1 (##core#undefined))
+ (scheme#length 'symbol)
-Warning: in local procedure `r-proc-call-argument-count-mismatch',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#cons', expected 2 arguments but was given 1 argument
+ Argument #1 to procedure `scheme#length' has invalid type
-Warning: in local procedure `r-proc-call-argument-type-mismatch',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#length', expected argument #1 of type `list' but was given an argument of type `symbol'
+ symbol
+
+ The expected type is
+
+ list
+
+ The procedure's type is
+
+ (procedure scheme#length (list) fixnum)
-Warning: in local procedure `r-proc-call-argument-value-count',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-proc-call-argument-value-count', a local procedure
(test-scrutinizer-message-format.scm:XXX) expected a single result in argument #1 of procedure call `(scheme#list (chicken.time#cpu-time))', but received 2 results
-Warning: in local procedure `r-proc-call-argument-value-count',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-proc-call-argument-value-count', a local procedure
(test-scrutinizer-message-format.scm:XXX) expected a single result in argument #1 of procedure call `(scheme#vector (scheme#values))', but received zero results
-Warning: in local procedure `r-proc-call-argument-value-count',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-proc-call-argument-value-count', a local procedure
expected a single result in `let' binding of `gXXX', but received zero results
-Warning: in local procedure `r-cond-branch-value-count-mismatch',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- branches in conditional expression differ in the number of results:
-
-(if (the * 1) 1 (chicken.time#cpu-time))
-
-Warning: in local procedure `r-invalid-called-procedure-type',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- in procedure call to `1', expected a value of type `(procedure (*) *)' but was given a value of type `fixnum'
-
-Note: in local procedure `r-pred-call-always-true',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `null' and will always return true
-
-Note: in local procedure `r-pred-call-always-false',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `fixnum' and will always return false
-
-Note: in local procedure `r-cond-test-always-true',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `fixnum' which is always true:
-
-(if (scheme#length '()) 1 (##core#undefined))
-
-Note: in local procedure `r-cond-test-always-false',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- in conditional, test expression will always return false:
-
-(if #f 1 (##core#undefined))
-
-Warning: in local procedure `r-type-mismatch-in-the',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- expression returns a result of type `fixnum' but is declared to return `symbol', which is not compatible
-
-Warning: in local procedure `r-zero-values-for-the',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- expression returns zero values but is declared to have a single result of type `symbol'
-
-Warning: in local procedure `r-too-many-values-for-the',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- expression returns 2 values but is declared to have a single result
-
-Warning: in local procedure `r-too-many-values-for-the',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- expression returns a result of type `fixnum' but is declared to return `symbol', which is not compatible
-
-Warning: in local procedure `r-toplevel-var-assignment-type-mismatch',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- assignment of value of type `fixnum' to toplevel variable `m#foo2' does not match declared type `boolean'
-
-Warning: in local procedure `r-deprecated-identifier',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-cond-branch-value-count-mismatch', a local procedure
+ In conditional expression
+
+ (if (the * 1) 1 (chicken.time#cpu-time))
+
+ The branches have different number of returned values.
+
+ The true branch returns 1 value
+
+ 1
+
+ The false branch returns 2 values
+
+ (chicken.time#cpu-time)
+
+Warning: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-invalid-called-procedure-type', a local procedure
+ In procedure call
+
+ (1 2)
+
+ Procedure in a procedure call has invalid type
+
+ fixnum
+
+ The expected type is
+
+ (procedure (*) *)
+
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-pred-call-always-true', a local procedure
+ In predicate call
+
+ (scheme#list? '())
+
+ Predicate call will always return true.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
+
+ The given argument has type
+
+ null
+
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-pred-call-always-false', a local procedure
+ In predicate call
+
+ (scheme#symbol? 1)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#symbol?' is a predicate for
+
+ symbol
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-cond-test-always-true', a local procedure
+ In conditional expression
+
+ (if (scheme#length '()) 1 (##core#undefined))
+
+ Test condition has always true value of type
+
+ fixnum
+
+Note: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-cond-test-always-false', a local procedure
+ In conditional expression
+
+ (if #f 1 (##core#undefined))
+
+ Test condition is always false.
+
+Warning: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-type-mismatch-in-the', a local procedure
+ In expression
+
+ 1
+
+ Expression's declared and actual types do not match.
+
+ The actual type is
+
+ fixnum
+
+ The expression's declared type is
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-zero-values-for-the', a local procedure
+ In expression
+
+ (scheme#values)
+
+ Expression returns 0 values but is declared to return
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-too-many-values-for-the', a local procedure
+ In expression
+
+ (scheme#values 1 2)
+
+ Expression returns too many values.
+
+ The expression returns 2 values but is declared to return
+
+ symbol
+
+Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-too-many-values-for-the', a local procedure
+ In expression
+
+ (scheme#values 1 2)
+
+ Expression's declared and actual types do not match.
+
+ The actual type is
+
+ fixnum
+
+ The expression's declared type is
+
+ symbol
+
+Warning: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-toplevel-var-assignment-type-mismatch', a local procedure
+ In assignment
+
+ (set! m#foo2 1)
+
+ Variable `m#foo2' is assigned invalid value.
+
+ The assigned value has type
+
+ fixnum
+
+ The declared type of `m#foo2' is
+
+ boolean
+
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-deprecated-identifier', a local procedure
use of deprecated `m#deprecated-foo'
-Warning: in local procedure `r-deprecated-identifier',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `r-deprecated-identifier', a local procedure
use of deprecated `m#deprecated-foo2' - consider `foo'
-Warning: in local procedure `list-ref-negative-index',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `list-ref-negative-index', a local procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list-ref', index -1 is negative, which is never valid
-Warning: in local procedure `list-ref-out-of-range',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `list-ref-out-of-range', a local procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#list-ref', index 1 out of range for proper list of length 0
-Warning: in local procedure `vector-ref-out-of-range',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `vector-ref-out-of-range', a local procedure
(test-scrutinizer-message-format.scm:XXX) in procedure call to `scheme#vector-ref', index -1 out of range for vector of length 0
-Warning: in local procedure `zero-values-for-let',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `zero-values-for-let', a local procedure
expected a single result in `let' binding of `a', but received zero results
-Warning: in local procedure `multiple-values-for-let',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `multiple-values-for-let', a local procedure
expected a single result in `let' binding of `a', but received 2 results
-Warning: in local procedure `zero-values-for-conditional',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `zero-values-for-conditional', a local procedure
expected a single result in conditional, but received zero results
-Warning: in local procedure `multiple-values-for-conditional',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
+Warning: In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `multiple-values-for-conditional', a local procedure
expected a single result in conditional, but received 2 results
-Note: in local procedure `multiple-values-for-conditional',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `fixnum' which is always true:
+Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `multiple-values-for-conditional', a local procedure
+ In conditional expression
+
+ (if (scheme#values 1 2) 1 (##core#undefined))
+
+ Test condition has always true value of type
+
+ fixnum
+
+Error: Type mismatch (test-scrutinizer-message-format.scm:XXX)
+ In `m#toplevel-foo', a toplevel procedure
+ In `local-bar', a local procedure
+ In `fail-compiler-typecase', a local procedure
+ In `compiler-typecase' expression
-(if (scheme#values 1 2) 1 (##core#undefined))
+ (compiler-typecase gXXX (symbol 1) (list 2) (else (##core#undefined)))
+
+ Tested expression in `compiler-typecase' does not match any case.
+
+ The expression has this type
+
+ fixnum
+
+ The specified type cases are these
-Error: in local procedure `fail-compiler-typecase',
- in local procedure `local-bar',
- in toplevel procedure `m#toplevel-foo':
- (test-scrutinizer-message-format.scm:XXX) no clause applies in `compiler-typecase' for expression of type `fixnum':
symbol
+
list
diff --git a/tests/scrutiny-2.expected b/tests/scrutiny-2.expected
index 79c7ad5b..58f98619 100644
--- a/tests/scrutiny-2.expected
+++ b/tests/scrutiny-2.expected
@@ -1,68 +1,354 @@
;; numbers replaced with XXX by redact-gensyms.scm
;; prefixes: (tmp g scm:)
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#pair?', the predicate is called with an argument of type `pair' and will always return true
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#pair?', the predicate is called with an argument of type `null' and will always return false
+ (scheme#pair? p)
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#pair?', the predicate is called with an argument of type `null' and will always return false
+ Predicate call will always return true.
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#pair?', the predicate is called with an argument of type `fixnum' and will always return false
+ Procedure `scheme#pair?' is a predicate for
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#pair?', the predicate is called with an argument of type `float' and will always return false
+ pair
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `null' and will always return true
+ The given argument has type
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `null' and will always return true
+ pair
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `fixnum' and will always return false
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#list?', the predicate is called with an argument of type `float' and will always return false
+ (scheme#pair? l)
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#null?', the predicate is called with an argument of type `null' and will always return true
+ Predicate call will always return false.
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#null?', the predicate is called with an argument of type `null' and will always return true
+ Procedure `scheme#pair?' is a predicate for
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#null?', the predicate is called with an argument of type `pair' and will always return false
+ pair
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#null?', the predicate is called with an argument of type `fixnum' and will always return false
+ The given argument has type
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#null?', the predicate is called with an argument of type `float' and will always return false
+ null
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `chicken.base#fixnum?', the predicate is called with an argument of type `fixnum' and will always return true
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `chicken.base#fixnum?', the predicate is called with an argument of type `float' and will always return false
+ (scheme#pair? n)
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `chicken.base#flonum?', the predicate is called with an argument of type `float' and will always return true
+ Predicate call will always return false.
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `chicken.base#flonum?', the predicate is called with an argument of type `fixnum' and will always return false
+ Procedure `scheme#pair?' is a predicate for
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#number?', the predicate is called with an argument of type `fixnum' and will always return true
+ pair
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#number?', the predicate is called with an argument of type `float' and will always return true
+ The given argument has type
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#number?', the predicate is called with an argument of type `number' and will always return true
+ null
-Note: at toplevel:
- (scrutiny-tests-2.scm:XXX) in procedure call to `scheme#number?', the predicate is called with an argument of type `null' and will always return false
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#pair? i)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#pair?' is a predicate for
+
+ pair
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#pair? f)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#pair?' is a predicate for
+
+ pair
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#list? l)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
+
+ The given argument has type
+
+ null
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#list? n)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
+
+ The given argument has type
+
+ null
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#list? i)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#list? f)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#list?' is a predicate for
+
+ list
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#null? n)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#null?' is a predicate for
+
+ null
+
+ The given argument has type
+
+ null
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#null? l)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#null?' is a predicate for
+
+ null
+
+ The given argument has type
+
+ null
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#null? p)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#null?' is a predicate for
+
+ null
+
+ The given argument has type
+
+ pair
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#null? i)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#null?' is a predicate for
+
+ null
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#null? f)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#null?' is a predicate for
+
+ null
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (chicken.base#fixnum? i)
+
+ Predicate call will always return true.
+
+ Procedure `chicken.base#fixnum?' is a predicate for
+
+ fixnum
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (chicken.base#fixnum? f)
+
+ Predicate call will always return false.
+
+ Procedure `chicken.base#fixnum?' is a predicate for
+
+ fixnum
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (chicken.base#flonum? f)
+
+ Predicate call will always return true.
+
+ Procedure `chicken.base#flonum?' is a predicate for
+
+ float
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (chicken.base#flonum? i)
+
+ Predicate call will always return false.
+
+ Procedure `chicken.base#flonum?' is a predicate for
+
+ float
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#number? i)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#number?' is a predicate for
+
+ number
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#number? f)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#number?' is a predicate for
+
+ number
+
+ The given argument has type
+
+ float
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#number? u)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#number?' is a predicate for
+
+ number
+
+ The given argument has type
+
+ number
+
+Note: Type mismatch (scrutiny-tests-2.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#number? n)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#number?' is a predicate for
+
+ number
+
+ The given argument has type
+
+ null
diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected
index bab33e34..1b3f55fa 100644
--- a/tests/scrutiny.expected
+++ b/tests/scrutiny.expected
@@ -3,215 +3,898 @@
Warning: (scrutiny-tests.scm:XXX) - assignment to imported value binding `car'
-Note: in local procedure `c',
- in local procedure `b',
- in toplevel procedure `a':
- expected a value of type boolean in conditional, but was given a value of type `number' which is always true:
+Note: Type mismatch
+ In `a', a toplevel procedure
+ In `b', a local procedure
+ In `c', a local procedure
+ In conditional expression
-(if x 1 2)
+ (if x 1 2)
-Note: in toplevel procedure `b':
- expected a value of type boolean in conditional, but was given a value of type `true' which is always true:
+ Test condition has always true value of type
-(if x 1 2)
+ number
-Warning: in toplevel procedure `foo':
- branches in conditional expression differ in the number of results:
+Note: Type mismatch
+ In `b', a toplevel procedure
+ In conditional expression
-(if x (scheme#values 1 2) (scheme#values 1 2 (scheme#+ (scheme#+ ...))))
+ (if x 1 2)
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `bar', expected argument #2 of type `number' but was given an argument of type `symbol'
+ Test condition has always true value of type
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string?', expected 1 argument but was given 0 arguments
+ true
-Warning: at toplevel:
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo', a toplevel procedure
+ In conditional expression
+
+ (if x (scheme#values 1 2) (scheme#values 1 2 (scheme#+ (scheme#+ ...))))
+
+ The branches have different number of returned values.
+
+ The true branch returns 2 values
+
+ (scheme#values 1 2)
+
+ The false branch returns 3 values
+
+ (scheme#values 1 2 (scheme#+ (scheme#+ (scheme#+ ...))))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (bar 3 'a)
+
+ Argument #2 to procedure `bar' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (scheme#string?)
+
+ Procedure `scheme#string?' is called with 0 arguments but 1 argument is expected.
+
+ The procedure's type is
+
+ (procedure scheme#string? (*) boolean)
+
+Warning: At toplevel
(scrutiny-tests.scm:XXX) expected a single result in argument #1 of procedure call `(chicken.base#print (scheme#values 1 2))', but received 2 results
-Warning: at toplevel:
+Warning: At toplevel
(scrutiny-tests.scm:XXX) expected a single result in argument #1 of procedure call `(chicken.base#print (scheme#values))', but received zero results
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `x', expected a value of type `(procedure () *)' but was given a value of type `fixnum'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (x)
+
+ Procedure in a procedure call has invalid type
+
+ fixnum
+
+ The expected type is
+
+ (procedure () *)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (scheme#+ 'a 'b)
+
+ Argument #1 to procedure `scheme#+' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (scheme#+ 'a 'b)
+
+ Argument #2 to procedure `scheme#+' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `symbol'
+ (procedure scheme#+ (#!rest number) number)
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #2 of type `number' but was given an argument of type `symbol'
+Warning: Type mismatch
+ At toplevel
+ In assignment
-Warning: at toplevel:
- assignment of value of type `fixnum' to toplevel variable `scheme#car' does not match declared type `(forall (a335) (procedure scheme#car ((pair a335 *)) a335))'
+ (set! scheme#car 33)
-Warning: at toplevel:
+ Variable `scheme#car' is assigned invalid value.
+
+ The assigned value has type
+
+ fixnum
+
+ The declared type of `scheme#car' is
+
+ (forall (a335) (procedure scheme#car ((pair a335 *)) a335))
+
+Warning: At toplevel
expected a single result in `let' binding of `gXXX', but received 2 results
-Warning: at toplevel:
- in procedure call to `gXXX', expected a value of type `(procedure () *)' but was given a value of type `fixnum'
+Warning: Type mismatch
+ At toplevel
+ In procedure call
+
+ (gXXX)
+
+ Procedure in a procedure call has invalid type
+
+ fixnum
+
+ The expected type is
+
+ (procedure () *)
+
+Note: Type mismatch
+ In `foo', a toplevel procedure
+ In conditional expression
+
+ (if bar 3 (##core#undefined))
+
+ Test condition has always true value of type
+
+ (procedure bar () *)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo2', a toplevel procedure
+ In procedure call
+
+ (scheme#string-append x "abc")
+
+ Argument #1 to procedure `scheme#string-append' has invalid type
+
+ number
+
+ The expected type is
+
+ string
+
+ The procedure's type is
+
+ (procedure scheme#string-append (#!rest string) string)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (foo3 99)
+
+ Argument #1 to procedure `foo3' has invalid type
+
+ fixnum
+
+ The expected type is
+
+ string
+
+ The procedure's type is
+
+ (procedure foo3 (string) string)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo4', a toplevel procedure
+ In procedure call
+
+ (scheme#+ x 1)
+
+ Argument #1 to procedure `scheme#+' has invalid type
+
+ string
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo5', a toplevel procedure
+ In procedure call
-Note: in toplevel procedure `foo':
- expected a value of type boolean in conditional, but was given a value of type `(procedure bar () *)' which is always true:
+ (scheme#+ x 3)
-(if bar 3 (##core#undefined))
+ Argument #1 to procedure `scheme#+' has invalid type
-Warning: in toplevel procedure `foo2':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string-append', expected argument #1 of type `string' but was given an argument of type `number'
+ string
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `foo3', expected argument #1 of type `string' but was given an argument of type `fixnum'
+ The expected type is
-Warning: in toplevel procedure `foo4':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `string'
+ number
-Warning: in toplevel procedure `foo5':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `string'
+ The procedure's type is
-Warning: in toplevel procedure `foo6':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `string'
+ (procedure scheme#+ (#!rest number) number)
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `string'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo6', a toplevel procedure
+ In procedure call
-Warning: in toplevel procedure `foo10':
- (scrutiny-tests.scm:XXX) in procedure call to `foo9', expected argument #1 of type `string' but was given an argument of type `number'
+ (scheme#+ x 3)
-Warning: in toplevel procedure `foo10':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #1 of type `number' but was given an argument of type `string'
+ Argument #1 to procedure `scheme#+' has invalid type
-Warning: in toplevel procedure `foo10':
- expression returns a result of type `string' but is declared to return `pair', which is not compatible
+ string
-Warning: in toplevel procedure `foo10':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string-append', expected argument #1 of type `string' but was given an argument of type `pair'
+ The expected type is
-Warning: in toplevel procedure `foo10':
- expression returns 2 values but is declared to have a single result
+ number
-Warning: in toplevel procedure `foo10':
- expression returns zero values but is declared to have a single result of type `*'
+ The procedure's type is
-Warning: in toplevel procedure `foo10':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#*', expected argument #1 of type `number' but was given an argument of type `string'
+ (procedure scheme#+ (#!rest number) number)
-Warning: in toplevel procedure `foo#blabla':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#+', expected argument #2 of type `number' but was given an argument of type `symbol'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
-Warning: at toplevel:
+ (scheme#+ x 1)
+
+ Argument #1 to procedure `scheme#+' has invalid type
+
+ string
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In procedure call
+
+ (foo9 x)
+
+ Argument #1 to procedure `foo9' has invalid type
+
+ number
+
+ The expected type is
+
+ string
+
+ The procedure's type is
+
+ (procedure foo9 (string) symbol)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In procedure call
+
+ (scheme#+ x 1)
+
+ Argument #1 to procedure `scheme#+' has invalid type
+
+ string
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In expression
+
+ (scheme#substring x 0 10)
+
+ Expression's declared and actual types do not match.
+
+ The actual type is
+
+ string
+
+ The expression's declared type is
+
+ pair
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In procedure call
+
+ (scheme#string-append (the pair (scheme#substring x 0 10)))
+
+ Argument #1 to procedure `scheme#string-append' has invalid type
+
+ pair
+
+ The expected type is
+
+ string
+
+ The procedure's type is
+
+ (procedure scheme#string-append (#!rest string) string)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In expression
+
+ (scheme#values 1 2)
+
+ Expression returns too many values.
+
+ The expression returns 2 values but is declared to return
+
+ *
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In expression
+
+ (scheme#values)
+
+ Expression returns 0 values but is declared to return
+
+ *
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo10', a toplevel procedure
+ In procedure call
+
+ (scheme#* x y)
+
+ Argument #1 to procedure `scheme#*' has invalid type
+
+ string
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#* (#!rest number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `foo#blabla', a toplevel procedure
+ In procedure call
+
+ (scheme#+ 1 'x)
+
+ Argument #2 to procedure `scheme#+' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure scheme#+ (#!rest number) number)
+
+Warning: At toplevel
use of deprecated `deprecated-procedure'
-Warning: at toplevel:
+Warning: At toplevel
use of deprecated `another-deprecated-procedure' - consider `replacement-procedure'
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `apply1', expected argument #2 of type `(list-of number)' but was given an argument of type `(list symbol fixnum fixnum)'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (apply1 scheme#+ (scheme#list 'a 2 3))
+
+ Argument #2 to procedure `apply1' has invalid type
+
+ (list symbol fixnum fixnum)
+
+ The expected type is
+
+ (list-of number)
+
+ The procedure's type is
+
+ (forall
+ (a143 b144)
+ (procedure apply1 ((procedure (#!rest a143) b144) (list-of a143)) b144))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (apply1 scheme#+ (scheme#cons 'a (scheme#cons 2 (scheme#cons 3 ...))))
+
+ Argument #2 to procedure `apply1' has invalid type
+
+ (list symbol fixnum fixnum)
+
+ The expected type is
+
+ (list-of number)
+
+ The procedure's type is
+
+ (forall
+ (a143 b144)
+ (procedure apply1 ((procedure (#!rest a143) b144) (list-of a143)) b144))
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `apply1', expected argument #2 of type `(list-of number)' but was given an argument of type `(list symbol fixnum fixnum)'
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#fixnum?', the predicate is called with an argument of type `fixnum' and will always return true
+ (chicken.base#fixnum? x)
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `(or char string)' and will always return false
+ Predicate call will always return true.
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `(not (or char string))' and will always return false
+ Procedure `chicken.base#fixnum?' is a predicate for
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `char-or-string?', the predicate is called with an argument of type `fixnum' and will always return false
+ fixnum
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `(or char string)' and will always return false
+ The given argument has type
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `fixnum' and will always return false
+ fixnum
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `char' and will always return false
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `symbol' and will always return false
+ (scheme#symbol? x)
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#symbol?', the predicate is called with an argument of type `(or char string)' and will always return false
+ Predicate call will always return false.
-Note: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `symbol' and will always return false
+ Procedure `scheme#symbol?' is a predicate for
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `f', expected argument #1 of type `pair' but was given an argument of type `null'
+ symbol
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `f', expected argument #1 of type `null' but was given an argument of type `(list fixnum)'
+ The given argument has type
-Warning: at toplevel:
- (scrutiny-tests.scm:XXX) in procedure call to `f', expected argument #1 of type `list' but was given an argument of type `(pair fixnum fixnum)'
+ (or char string)
-Warning: in toplevel procedure `vector-ref-warn1':
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#string? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#string?' is a predicate for
+
+ string
+
+ The given argument has type
+
+ (not (or char string))
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (char-or-string? x)
+
+ Predicate call will always return false.
+
+ Procedure `char-or-string?' is a predicate for
+
+ (or char string)
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#symbol? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#symbol?' is a predicate for
+
+ symbol
+
+ The given argument has type
+
+ (or char string)
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#string? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#string?' is a predicate for
+
+ string
+
+ The given argument has type
+
+ fixnum
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#symbol? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#symbol?' is a predicate for
+
+ symbol
+
+ The given argument has type
+
+ char
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#string? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#string?' is a predicate for
+
+ string
+
+ The given argument has type
+
+ symbol
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#symbol? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#symbol?' is a predicate for
+
+ symbol
+
+ The given argument has type
+
+ (or char string)
+
+Note: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#string? x)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#string?' is a predicate for
+
+ string
+
+ The given argument has type
+
+ symbol
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (f (scheme#list))
+
+ Argument #1 to procedure `f' has invalid type
+
+ null
+
+ The expected type is
+
+ pair
+
+ The procedure's type is
+
+ (procedure (pair) *)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (f (scheme#list 1))
+
+ Argument #1 to procedure `f' has invalid type
+
+ (list fixnum)
+
+ The expected type is
+
+ null
+
+ The procedure's type is
+
+ (procedure (null) *)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ At toplevel
+ In procedure call
+
+ (f (scheme#cons 1 2))
+
+ Argument #1 to procedure `f' has invalid type
+
+ (pair fixnum fixnum)
+
+ The expected type is
+
+ list
+
+ The procedure's type is
+
+ (procedure (list) *)
+
+Warning: In `vector-ref-warn1', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-ref', index -1 out of range for vector of length 3
-Warning: in toplevel procedure `vector-ref-warn2':
+Warning: In `vector-ref-warn2', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-ref', index 3 out of range for vector of length 3
-Warning: in toplevel procedure `vector-ref-warn3':
+Warning: In `vector-ref-warn3', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-ref', index 4 out of range for vector of length 3
-Warning: in toplevel procedure `vector-ref-standard-warn1':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-ref', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `vector-ref-standard-warn1', a toplevel procedure
+ In procedure call
+
+ (scheme#vector-ref v1 'bad)
+
+ Argument #2 to procedure `scheme#vector-ref' has invalid type
+
+ symbol
+
+ The expected type is
-Warning: in toplevel procedure `vector-set!-warn1':
+ fixnum
+
+ The procedure's type is
+
+ (forall (a384) (procedure scheme#vector-ref ((vector-of a384) fixnum) a384))
+
+Warning: In `vector-set!-warn1', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-set!', index -1 out of range for vector of length 3
-Warning: in toplevel procedure `vector-set!-warn2':
+Warning: In `vector-set!-warn2', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-set!', index 3 out of range for vector of length 3
-Warning: in toplevel procedure `vector-set!-warn3':
+Warning: In `vector-set!-warn3', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-set!', index 4 out of range for vector of length 3
-Warning: in toplevel procedure `vector-set!-standard-warn1':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#vector-set!', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `vector-set!-standard-warn1', a toplevel procedure
+ In procedure call
+
+ (scheme#vector-set! v1 'bad 'whatever)
+
+ Argument #2 to procedure `scheme#vector-set!' has invalid type
-Warning: in toplevel procedure `list-ref-warn1':
+ symbol
+
+ The expected type is
+
+ fixnum
+
+ The procedure's type is
+
+ (procedure scheme#vector-set! (vector fixnum *) undefined)
+
+Warning: In `list-ref-warn1', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', index -1 is negative, which is never valid
-Warning: in toplevel procedure `list-ref-warn2':
+Warning: In `list-ref-warn2', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', index -1 is negative, which is never valid
-Warning: in toplevel procedure `list-ref-warn3':
+Warning: In `list-ref-warn3', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', index -1 is negative, which is never valid
-Warning: in toplevel procedure `list-ref-warn4':
+Warning: In `list-ref-warn4', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', index 3 out of range for proper list of length 3
-Warning: in toplevel procedure `list-ref-warn5':
+Warning: In `list-ref-warn5', a toplevel procedure
(scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', index 4 out of range for proper list of length 3
-Warning: in toplevel procedure `list-ref-standard-warn1':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-standard-warn1', a toplevel procedure
+ In procedure call
+
+ (scheme#list-ref l1 'bad)
+
+ Argument #2 to procedure `scheme#list-ref' has invalid type
+
+ symbol
+
+ The expected type is
+
+ fixnum
+
+ The procedure's type is
+
+ (forall (a366) (procedure scheme#list-ref ((list-of a366) fixnum) a366))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-standard-warn2', a toplevel procedure
+ In procedure call
+
+ (scheme#list-ref l1 'bad)
+
+ Argument #2 to procedure `scheme#list-ref' has invalid type
+
+ symbol
+
+ The expected type is
+
+ fixnum
+
+ The procedure's type is
+
+ (forall (a366) (procedure scheme#list-ref ((list-of a366) fixnum) a366))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-standard-warn3', a toplevel procedure
+ In procedure call
+
+ (scheme#list-ref l2 'bad)
+
+ Argument #2 to procedure `scheme#list-ref' has invalid type
+
+ symbol
+
+ The expected type is
+
+ fixnum
+
+ The procedure's type is
+
+ (forall (a366) (procedure scheme#list-ref ((list-of a366) fixnum) a366))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-standard-warn4', a toplevel procedure
+ In procedure call
+
+ (scheme#list-ref l2 'bad)
+
+ Argument #2 to procedure `scheme#list-ref' has invalid type
+
+ symbol
+
+ The expected type is
+
+ fixnum
+
+ The procedure's type is
+
+ (forall (a366) (procedure scheme#list-ref ((list-of a366) fixnum) a366))
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-type-warn1', a toplevel procedure
+ In procedure call
+
+ (chicken.base#add1 (scheme#list-ref l1 1))
+
+ Argument #1 to procedure `chicken.base#add1' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure chicken.base#add1 (number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-type-warn2', a toplevel procedure
+ In procedure call
+
+ (chicken.base#add1 (scheme#list-ref l2 1))
+
+ Argument #1 to procedure `chicken.base#add1' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure chicken.base#add1 (number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `list-ref-type-warn3', a toplevel procedure
+ In procedure call
+
+ (chicken.base#add1 (scheme#list-ref l3 1))
+
+ Argument #1 to procedure `chicken.base#add1' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure chicken.base#add1 (number) number)
+
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `append-result-type-warn1', a toplevel procedure
+ In procedure call
+
+ (chicken.base#add1 (scheme#list-ref l1 1))
+
+ Argument #1 to procedure `chicken.base#add1' has invalid type
+
+ symbol
+
+ The expected type is
+
+ number
+
+ The procedure's type is
+
+ (procedure chicken.base#add1 (number) number)
-Warning: in toplevel procedure `list-ref-standard-warn2':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+Warning: Type mismatch (scrutiny-tests.scm:XXX)
+ In `append-result-type-warn2', a toplevel procedure
+ In procedure call
-Warning: in toplevel procedure `list-ref-standard-warn3':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+ (chicken.base#add1 (scheme#list-ref l3 3))
-Warning: in toplevel procedure `list-ref-standard-warn4':
- (scrutiny-tests.scm:XXX) in procedure call to `scheme#list-ref', expected argument #2 of type `fixnum' but was given an argument of type `symbol'
+ Argument #1 to procedure `chicken.base#add1' has invalid type
-Warning: in toplevel procedure `list-ref-type-warn1':
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#add1', expected argument #1 of type `number' but was given an argument of type `symbol'
+ symbol
-Warning: in toplevel procedure `list-ref-type-warn2':
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#add1', expected argument #1 of type `number' but was given an argument of type `symbol'
+ The expected type is
-Warning: in toplevel procedure `list-ref-type-warn3':
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#add1', expected argument #1 of type `number' but was given an argument of type `symbol'
+ number
-Warning: in toplevel procedure `append-result-type-warn1':
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#add1', expected argument #1 of type `number' but was given an argument of type `symbol'
+ The procedure's type is
-Warning: in toplevel procedure `append-result-type-warn2':
- (scrutiny-tests.scm:XXX) in procedure call to `chicken.base#add1', expected argument #1 of type `number' but was given an argument of type `symbol'
+ (procedure chicken.base#add1 (number) number)
Warning: redefinition of standard binding: scheme#car
diff --git a/tests/specialization.expected b/tests/specialization.expected
index eff536eb..6f8fe43a 100644
--- a/tests/specialization.expected
+++ b/tests/specialization.expected
@@ -1,34 +1,104 @@
;; numbers replaced with XXX by redact-gensyms.scm
;; prefixes: (tmp g scm:)
-Note: at toplevel:
- (specialization-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `string' and will always return true
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In predicate call
-Note: at toplevel:
- (specialization-tests.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `true' which is always true:
+ (scheme#string? a)
-(if (scheme#string? a) 'ok 'no)
+ Predicate call will always return true.
-Note: at toplevel:
- (specialization-tests.scm:XXX) in procedure call to `scheme#string?', the predicate is called with an argument of type `symbol' and will always return false
+ Procedure `scheme#string?' is a predicate for
-Note: at toplevel:
- (specialization-tests.scm:XXX) in conditional, test expression will always return false:
+ string
-(if (scheme#string? a) 'ok 'no)
+ The given argument has type
-Note: at toplevel:
- (specialization-tests.scm:XXX) in procedure call to `scheme#input-port?', the predicate is called with an argument of type `input/output-port' and will always return true
+ string
-Note: at toplevel:
- (specialization-tests.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `true' which is always true:
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In conditional expression
-(if (scheme#input-port? p) 'ok 'no)
+ (if (scheme#string? a) 'ok 'no)
-Note: at toplevel:
- (specialization-tests.scm:XXX) in procedure call to `scheme#output-port?', the predicate is called with an argument of type `input/output-port' and will always return true
+ Test condition has always true value of type
-Note: at toplevel:
- (specialization-tests.scm:XXX) expected a value of type boolean in conditional, but was given a value of type `true' which is always true:
+ true
-(if (scheme#output-port? p) 'ok 'no)
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#string? a)
+
+ Predicate call will always return false.
+
+ Procedure `scheme#string?' is a predicate for
+
+ string
+
+ The given argument has type
+
+ symbol
+
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In conditional expression
+
+ (if (scheme#string? a) 'ok 'no)
+
+ Test condition is always false.
+
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#input-port? p)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#input-port?' is a predicate for
+
+ input-port
+
+ The given argument has type
+
+ input/output-port
+
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In conditional expression
+
+ (if (scheme#input-port? p) 'ok 'no)
+
+ Test condition has always true value of type
+
+ true
+
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In predicate call
+
+ (scheme#output-port? p)
+
+ Predicate call will always return true.
+
+ Procedure `scheme#output-port?' is a predicate for
+
+ output-port
+
+ The given argument has type
+
+ input/output-port
+
+Note: Type mismatch (specialization-tests.scm:XXX)
+ At toplevel
+ In conditional expression
+
+ (if (scheme#output-port? p) 'ok 'no)
+
+ Test condition has always true value of type
+
+ true
Trap