~ chicken-core (chicken-5) 45c848d810a4b349930daa8becd99fe20702d5b8
commit 45c848d810a4b349930daa8becd99fe20702d5b8 Author: megane <meganeka@gmail.com> AuthorDate: Tue Nov 27 16:52:56 2018 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sat Mar 9 20:31:44 2019 +1300 Update messages for scrutiny special cases to new pretty print format Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/scrutinizer.scm b/scrutinizer.scm index 340b2c83..9e691cc3 100644 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -325,7 +325,7 @@ (d " call: ~a, te: ~a" actualtypes typeenv) (cond ((and (not pptype?) (not (match-types xptype ptype typeenv))) (r-invalid-called-procedure-type - loc node (resolve xptype typeenv) (resolve ptype typeenv)) + loc node (resolve xptype typeenv) (car args) (resolve ptype typeenv)) (values '* #f)) (else (let-values (((atypes values-rest ok alen) @@ -333,6 +333,7 @@ (unless ok (r-proc-call-argument-count-mismatch loc node alen nargs ptype)) (do ((actualtypes (cdr actualtypes) (cdr actualtypes)) + (anodes (cdr args) (cdr anodes)) (atypes atypes (cdr atypes)) (i 1 (add1 i))) ((or (null? actualtypes) (null? atypes))) @@ -342,6 +343,7 @@ typeenv) (r-proc-call-argument-type-mismatch loc node i + (car anodes) (resolve (car atypes) typeenv) (resolve (car actualtypes) typeenv) ptype))) @@ -2064,16 +2066,6 @@ rtypes))) (let () - ;; TODO: Complain argument not available here, so we can't use the - ;; standard "report" defined above. However, ##sys#enable-warnings - ;; and "complain" (do-scrutinize) are always true together, except - ;; that "complain" will be false while ##sys#enable-warnings is true - ;; on "no-usual-integrations", so perhaps get rid of "complain"? - (define (report loc msg . args) - (warning - (conc (location-name loc) - (sprintf "~?" msg args)))) - (define (known-length-vector-index node args loc expected-argcount) (and-let* ((subs (node-subexpressions node)) ((= (length subs) (add1 expected-argcount))) @@ -2088,12 +2080,7 @@ (if (and (>= val 0) (< val vector-length)) val (begin - (report - loc "~ain procedure call to `~a', index ~a out of range \ - for vector of length ~a" - (node-source-prefix node) - ;; TODO: It might make more sense to use "pname" here - (first (node-parameters (first subs))) val vector-length) + (r-index-out-of-range loc node val vector-length "vector") #f)))) ;; These are a bit hacky, since they mutate the node. These special @@ -2133,12 +2120,6 @@ ; list-ref, list-tail (let () - ;; See comment in vector (let) just above this - (define (report loc msg . args) - (warning - (conc (location-name loc) - (sprintf "~?" msg args)))) - (define (list-or-null a) (if (null? a) 'null `(list ,@a))) @@ -2181,25 +2162,15 @@ ((eq? 'quote (node-class index))) (val (first (node-parameters index))) ((fixnum? val))) ; Standard type warning otherwise - ;; TODO: It might make sense to use "pname" when reporting (cond ((negative? val) - ;; Negative indices should always generate a warning - (report - loc "~ain procedure call to `~a', index ~a is \ - negative, which is never valid" - (node-source-prefix node) - (first (node-parameters (first subs))) val) + (r-index-out-of-range loc node val 'not-used "list") #f) ((split-list-type arg1 val k)) ;; Warn only if it's a known proper list. This avoids ;; false warnings due to component smashing. ((proper-list-type-length arg1) => (lambda (length) - (report - loc "~ain procedure call to `~a', index ~a out of \ - range for proper list of length ~a" - (node-source-prefix node) - (first (node-parameters (first subs))) val length) + (r-index-out-of-range loc node val length "list") #f)) (else #f))) rtypes))) @@ -2245,12 +2216,6 @@ rtypes))) (let () - ;; See comment in vector (let) - (define (report loc msg . args) - (warning - (conc (location-name loc) - (sprintf "~?" msg args)))) - (define (append-special-case node args loc rtypes) (define (potentially-proper-list? l) (match-types l 'list '())) @@ -2282,17 +2247,9 @@ ;; The final argument may be an atom or improper list (unless (or (null? (cdr arg-types)) (potentially-proper-list? arg1)) - (report - 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 - (type->pp-string arg1))) + (r-proc-call-argument-type-mismatch + loc node index 'list + (car arg-types) arg1 (variable-mark 'scheme#append '##compiler#type))) #f)))))) (cond ((derive-result-type) => list) (else rtypes))) @@ -2496,25 +2453,27 @@ (define (describe-expression node) (define (p-expr n) - (sprintf (string-append "This is the expression" "~%~%" "~a") + (sprintf (string-append "This is the expression:" "~%~%" "~a") (pp-fragment n))) (define (p-node n) - (or (and (eq? '##core#call (node-class n)) - (let ((pnode (first (node-subexpressions n)))) - (and-let* (((eq? '##core#variable (node-class pnode))) - (pname (car (node-parameters pnode))) - (ptype (variable-mark pname '##compiler#type))) - (sprintf (string-append - "It is a call to ~a which has type" - "~%~%" - "~a" - "~%~%" - "~a") - (variable-from-module pname) - (type->pp-string ptype) - (p-expr n))))) - (p-expr n))) - (p-node node)) + (cond ((and (eq? '##core#call (node-class n)) + (let ((pnode (first (node-subexpressions n)))) + (and-let* (((eq? '##core#variable (node-class pnode))) + (pname (car (node-parameters pnode))) + (ptype (variable-mark pname '##compiler#type))) + (sprintf (string-append + "It is a call to ~a which has this type:" + "~%~%" + "~a" + "~%~%" + "~a") + (variable-from-module pname) + (type->pp-string ptype) + (p-expr n)))))) + ((eq? '##core#the/result (node-class n)) ; walk through + (p-node (first (node-subexpressions n)))) + (else (p-expr n)))) + (p-node (source-node-tree node))) (define (call-node-procedure-name node) (fragment (first (node-subexpressions node)))) @@ -2531,34 +2490,64 @@ (let ((l (file-location))) (if l (conc " " l) "")) (string-add-indent (conc "\n" (location-name loc "") (sprintf "~?" msg args)) - " "))))) + " "))) + (flush-output))) (define (report-notice reason location-node-candidates loc msg . args) (apply report2 reason ##sys#notice location-node-candidates loc msg args)) ;;; Reports -(define (r-invalid-called-procedure-type loc node xptype ptype) - (report2 - "Invalid procedure" - warning - (list node) - loc - (string-append - "In procedure call" - "~%~%" - "~a" - "~%~%" - "The procedure has invalid type" - "~%~%" - "~a" - "~%~%" - "The expected type is" - "~%~%" - "~a") - (pp-fragment node) - (type->pp-string ptype) - (type->pp-string xptype))) +(define (r-invalid-called-procedure-type loc call-node xptype p-node ptype) + (define (variable-node-name n) + (cond ((eq? '##core#the/result (node-class n)) + (variable-node-name (first (node-subexpressions n)))) + ((eq? '##core#variable (node-class n)) (car (node-parameters n))) + (else #f))) + (if (variable-node-name p-node) + (report2 + "Invalid procedure" + warning + (list p-node call-node) + loc + (string-append + "In procedure call:" + "~%~%" + "~a" + "~%~%" + "Variable ~a is not a procedure." + "~%~%" + "It has this type:" + "~%~%" + "~a") + (pp-fragment call-node) + (variable-from-module (variable-node-name p-node)) + (type->pp-string ptype)) + (report2 + "Invalid procedure" + warning + (list p-node call-node) + loc + (string-append + "In procedure call:" + "~%~%" + "~a" + "~%~%" + "The procedure expression does not appear to be a callable." + "~%~%" + "~a" + "~%~%" + "The expected type is:" + "~%~%" + "~a" + "~%~%" + "The actual type is:" + "~%~%" + "~a") + (pp-fragment call-node) + (describe-expression p-node) + (type->pp-string xptype) + (type->pp-string ptype)))) (define (r-proc-call-argument-count-mismatch loc node exp-count argc ptype) (define pname (call-node-procedure-name node)) @@ -2568,13 +2557,13 @@ (list node) loc (string-append - "In procedure call" + "In procedure call:" "~%~%" "~a" "~%~%" "Procedure `~a' is called with ~a argument~a but ~a argument~a ~a expected." "~%~%" - "Procedure ~a has type" + "Procedure ~a has this type:" "~%~%" "~a") (pp-fragment node) @@ -2585,7 +2574,7 @@ (variable-from-module pname) (type->pp-string ptype))) -(define (r-proc-call-argument-type-mismatch loc node i xptype atype ptype) +(define (r-proc-call-argument-type-mismatch loc node i arg-node xptype atype ptype) (define pname (call-node-procedure-name node)) (report2 "Invalid argument" @@ -2593,19 +2582,21 @@ (list node) loc (string-append - "In procedure call" + "In procedure call:" "~%~%" "~a" "~%~%" - "Argument #~a to procedure `~a' has invalid type" + "Argument #~a to procedure `~a' has an invalid type:" "~%~%" "~a" "~%~%" - "The expected type is" + "The expected type is:" + "~%~%" + "~a" "~%~%" "~a" "~%~%" - "Procedure ~a has type" + "Procedure ~a has this type:" "~%~%" "~a") (pp-fragment node) @@ -2613,6 +2604,7 @@ (strip-namespace pname) (type->pp-string atype) (type->pp-string xptype) + (describe-expression arg-node) (variable-from-module pname) (type->pp-string ptype))) @@ -2625,7 +2617,7 @@ (list arg-node call-node) loc (string-append - "In procedure call" + "In procedure call:" "~%~%" "~a" "~%~%" @@ -2643,6 +2635,30 @@ (p "Too many argument values" (sprintf "returns ~a values but 1 is expected." (length atype))))) +(define (r-index-out-of-range loc node idx obj-length obj-name) + ;; Negative indices should always generate a warning + (define pname (call-node-procedure-name node)) + (report2 + (if (negative? idx) + (sprintf "Negative ~a index" obj-name) + (sprintf "~a~a index out of range" + (char-upcase (string-ref obj-name 0)) + (substring obj-name 1))) + warning + (list node) + loc + (string-append + "In procedure call:" + "~%~%" + "~a" + "~%~%" + "Procedure ~a is called with ~a") + (pp-fragment node) + (variable-from-module pname) + (if (negative? idx) + (sprintf "a negative index ~a." idx) + (sprintf "index `~a' for a ~a of length `~a'." idx obj-name obj-length)))) + (define (r-pred-call-always-true loc node pred-type atype) (define pname (call-node-procedure-name node)) (report-notice @@ -2650,17 +2666,17 @@ (list node) loc (string-append - "In procedure call" + "In procedure call:" "~%~%" "~a" "~%~%" "The predicate will always return true." "~%~%" - "Procedure ~a is a predicate for" + "Procedure ~a is a predicate for:" "~%~%" "~a" "~%~%" - "The given argument has type" + "The given argument has this type:" "~%~%" "~a") (pp-fragment node) @@ -2675,17 +2691,17 @@ (list node) loc (string-append - "In procedure call" + "In procedure call:" "~%~%" "~a" "~%~%" "The predicate will always return false." "~%~%" - "Procedure ~a is a predicate for" + "Procedure ~a is a predicate for:" "~%~%" "~a" "~%~%" - "The given argument has type" + "The given argument has this type:" "~%~%" "~a") (pp-fragment node) @@ -2699,11 +2715,11 @@ (list test-node if-node) loc (string-append - "In conditional expression" + "In conditional expression:" "~%~%" "~a" "~%~%" - "Test condition has always true value of type" + "Test condition has always true value of type:" "~%~%" "~a") (pp-fragment if-node) @@ -2715,7 +2731,7 @@ (list test-node if-node) loc (string-append - "In conditional expression" + "In conditional expression:" "~%~%" "~a" "~%~%" @@ -2730,11 +2746,11 @@ (list node) loc (string-append - "In expression" + "In expression:" "~%~%" "~a" "~%~%" - "Expression returns 0 values but is declared to return" + "Expression returns 0 values but is declared to return:" "~%~%" "~a") (pp-fragment node) @@ -2747,42 +2763,42 @@ (list node) loc (string-append - "In expression" + "In expression:" "~%~%" "~a" "~%~%" "Expression returns too many values." "~%~%" - "The expression returns ~a values but is declared to return" + "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) +(define (r-type-mismatch-in-the loc node atype the-type) (report2 "Type mismatch" warning (list node) loc (string-append - "In expression" + "In expression:" "~%~%" "~a" "~%~%" "Expression's declared and actual types do not match." "~%~%" - "The actual type is" + "The declared type is:" "~%~%" "~a" "~%~%" - "The expression's declared type is" + "The actual type is:" "~%~%" "~a") (pp-fragment node) - (type->pp-string first-rtype) - (type->pp-string the-type))) + (type->pp-string the-type) + (type->pp-string atype))) (define (fail-compiler-typecase loc node atype ct-types) (define (pp-type t) (string-add-indent (type->pp-string t) " ")) @@ -2791,17 +2807,17 @@ "No typecase match" "~a" "~a" - "In `compiler-typecase' expression" + "In `compiler-typecase' expression:" "~%~%" " ~a" "~%~%" " Tested expression does not match any case." "~%~%" - " The expression has type" + " The expression has this type:" "~%~%" "~a" "~%~%" - " The specified type cases are these" + " The specified type cases are these:" "~%~%" "~a") (if (string=? "" (node-source-prefix node)) @@ -2819,17 +2835,17 @@ (list a-node node) loc (string-append - "In conditional expression" + "In conditional expression:" "~%~%" "~a" "~%~%" "The branches have different numbers of values." "~%~%" - "The true branch returns ~a value~a" + "The true branch returns ~a value~a:" "~%~%" "~a" "~%~%" - "The false branch returns ~a value~a" + "The false branch returns ~a value~a:" "~%~%" "~a") (pp-fragment node) @@ -2845,23 +2861,25 @@ (list node value-node) loc (string-append - "In assignment" + "In assignment:" "~%~%" "~a" "~%~%" "Variable `~a' is assigned invalid value." "~%~%" - "The assigned value has type" + "The assigned value has this type:" "~%~%" "~a" "~%~%" - "The declared type of `~a' is" + "The declared type of ~a is:" "~%~%" "~a") (pp-fragment node) - var + (strip-namespace var) (type->pp-string atype) - var + (variable-from-module + (let ((n (real-name var))) + (if (symbol? n) n (string->symbol n)))) (type->pp-string xptype))) (define (r-deprecated-identifier loc node id #!optional suggestion) @@ -2871,7 +2889,7 @@ (list node) loc (string-append - "In expression" + "In expression:" "~%~%" "~a" "~%~%" diff --git a/tests/scrutinizer-message-format.expected b/tests/scrutinizer-message-format.expected index 8384c6d4..c3b34600 100644 --- a/tests/scrutinizer-message-format.expected +++ b/tests/scrutinizer-message-format.expected @@ -7,63 +7,67 @@ Warning: literal in operator position: (1 2) Warning: Wrong number of arguments (test-scrutinizer-message-format.scm:XXX) In `r-proc-call-argument-count-mismatch', a toplevel procedure - In procedure call + In procedure call: (scheme#cons '()) Procedure `cons' is called with 1 argument but 2 arguments are expected. - Procedure `cons' from module `scheme' has type + Procedure `cons' from module `scheme' has this type: ('aXXX 'bXXX --> (pair 'aXXX 'bXXX)) Warning: Invalid argument (test-scrutinizer-message-format.scm:XXX) In `r-proc-call-argument-type-mismatch', a toplevel procedure - In procedure call + In procedure call: (scheme#length 'symbol) - Argument #1 to procedure `length' has invalid type + Argument #1 to procedure `length' has an invalid type: symbol - The expected type is + The expected type is: list - Procedure `length' from module `scheme' has type + This is the expression: + + 'symbol + + Procedure `length' from module `scheme' has this type: (list -> fixnum) Warning: Too many argument values (test-scrutinizer-message-format.scm:XXX) In `r-proc-call-argument-value-count', a toplevel procedure - In procedure call + In procedure call: (scheme#list (chicken.time#cpu-time)) Argument #1 to procedure `list' returns 2 values but 1 is expected. - It is a call to `cpu-time' from module `chicken.time' which has type + It is a call to `cpu-time' from module `chicken.time' which has this type: (-> fixnum fixnum) - This is the expression + This is the expression: (chicken.time#cpu-time) Warning: Not enough argument values (test-scrutinizer-message-format.scm:XXX) In `r-proc-call-argument-value-count', a toplevel procedure - In procedure call + In procedure call: (scheme#vector (scheme#values)) Argument #1 to procedure `vector' does not return any values. - It is a call to `values' from module `scheme' which has type + It is a call to `values' from module `scheme' which has this type: (procedure (#!rest values) . *) - This is the expression + This is the expression: (scheme#values) @@ -72,79 +76,85 @@ Warning: In `r-proc-call-argument-value-count', a toplevel procedure Warning: Branch values mismatch (test-scrutinizer-message-format.scm:XXX) In `r-cond-branch-value-count-mismatch', a toplevel procedure - In conditional expression + In conditional expression: (if (the * 1) 1 (scheme#values 1 2)) The branches have different numbers of values. - The true branch returns 1 value + The true branch returns 1 value: 1 - The false branch returns 2 values + The false branch returns 2 values: (scheme#values 1 2) Warning: Invalid procedure In `r-invalid-called-procedure-type', a toplevel procedure - In procedure call + In procedure call: (1 2) - The procedure has invalid type + The procedure expression does not appear to be a callable. - fixnum + This is the expression: - The expected type is + 1 + + The expected type is: (* -> *) + The actual type is: + + fixnum + Note: Predicate is always true (test-scrutinizer-message-format.scm:XXX) In `r-pred-call-always-true', a toplevel procedure - In procedure call + In procedure call: (scheme#list? '()) The predicate will always return true. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: null Note: Predicate is always false (test-scrutinizer-message-format.scm:XXX) In `r-pred-call-always-false', a toplevel procedure - In procedure call + In procedure call: (scheme#symbol? 1) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: fixnum Note: Test is always true In `r-cond-test-always-true', a toplevel procedure - In conditional expression + In conditional expression: (if 'symbol 1 (##core#undefined)) - Test condition has always true value of type + Test condition has always true value of type: symbol Note: Test is always false In `r-cond-test-always-false', a toplevel procedure - In conditional expression + In conditional expression: (if #f 1 (##core#undefined)) @@ -152,77 +162,77 @@ Note: Test is always false Warning: Type mismatch In `r-type-mismatch-in-the', a toplevel procedure - In expression + In expression: 1 Expression's declared and actual types do not match. - The actual type is + The declared type is: - fixnum + symbol - The expression's declared type is + The actual type is: - symbol + fixnum Warning: Not enough values (test-scrutinizer-message-format.scm:XXX) In `r-zero-values-for-the', a toplevel procedure - In expression + In expression: (scheme#values) - Expression returns 0 values but is declared to return + Expression returns 0 values but is declared to return: symbol Warning: Too many values (test-scrutinizer-message-format.scm:XXX) In `r-too-many-values-for-the', a toplevel procedure - In expression + In expression: (scheme#values 1 2) Expression returns too many values. - The expression returns 2 values but is declared to return + 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 + In expression: (scheme#values 1 2) Expression's declared and actual types do not match. - The actual type is + The declared type is: - fixnum + symbol - The expression's declared type is + The actual type is: - symbol + fixnum Warning: Invalid assignment In `r-toplevel-var-assignment-type-mismatch', a toplevel procedure - In assignment + In assignment: (set! foo 1) Variable `foo' is assigned invalid value. - The assigned value has type + The assigned value has this type: fixnum - The declared type of `foo' is + The declared type of `foo' is: boolean Warning: Deprecated identifier `deprecated-foo' In `r-deprecated-identifier', a toplevel procedure - In expression + In expression: deprecated-foo @@ -230,7 +240,7 @@ Warning: Deprecated identifier `deprecated-foo' Warning: Deprecated identifier `deprecated-foo2' In `r-deprecated-identifier', a toplevel procedure - In expression + In expression: deprecated-foo2 @@ -240,28 +250,43 @@ Warning: Deprecated identifier `deprecated-foo2' Warning: Invalid assignment At toplevel - In assignment + In assignment: (set! foo 1) Variable `foo' is assigned invalid value. - The assigned value has type + The assigned value has this type: fixnum - The declared type of `foo' is + The declared type of `foo' is: 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: Negative list index (test-scrutinizer-message-format.scm:XXX) + In `list-ref-negative-index', a toplevel procedure + In procedure call: + + (scheme#list-ref '() -1) + + Procedure `list-ref' from module `scheme' is called with a negative index -1. + +Warning: List index out of range (test-scrutinizer-message-format.scm:XXX) + In `list-ref-out-of-range', a toplevel procedure + In procedure call: -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 + (scheme#list-ref '() 1) -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 + Procedure `list-ref' from module `scheme' is called with index `1' for a list of length `0'. + +Warning: Negative vector index (test-scrutinizer-message-format.scm:XXX) + In `vector-ref-out-of-range', a toplevel procedure + In procedure call: + + (scheme#vector-ref (scheme#vector) -1) + + Procedure `vector-ref' from module `scheme' is called with a negative index -1. Warning: In `zero-values-for-let', a toplevel procedure expected a single result in `let' binding of `a', but received zero results @@ -277,11 +302,11 @@ Warning: In `multiple-values-for-conditional', a toplevel procedure Note: Test is always true (test-scrutinizer-message-format.scm:XXX) In `multiple-values-for-conditional', a toplevel procedure - In conditional expression + In conditional expression: (if (scheme#values 1 2) 1 (##core#undefined)) - Test condition has always true value of type + Test condition has always true value of type: fixnum @@ -292,13 +317,13 @@ Warning: Wrong number of arguments (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 + In procedure call: (scheme#cons '()) Procedure `cons' is called with 1 argument but 2 arguments are expected. - Procedure `cons' from module `scheme' has type + Procedure `cons' from module `scheme' has this type: ('aXXX 'bXXX --> (pair 'aXXX 'bXXX)) @@ -306,19 +331,23 @@ Warning: Invalid argument (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 + In procedure call: (scheme#length 'symbol) - Argument #1 to procedure `length' has invalid type + Argument #1 to procedure `length' has an invalid type: symbol - The expected type is + The expected type is: list - Procedure `length' from module `scheme' has type + This is the expression: + + 'symbol + + Procedure `length' from module `scheme' has this type: (list -> fixnum) @@ -326,17 +355,17 @@ Warning: Too many argument values (test-scrutinizer-message-format.scm:XXX) In `m#toplevel-foo', a toplevel procedure In `local-bar', a local procedure In `r-proc-call-argument-value-count', a local procedure - In procedure call + In procedure call: (scheme#list (chicken.time#cpu-time)) Argument #1 to procedure `list' returns 2 values but 1 is expected. - It is a call to `cpu-time' from module `chicken.time' which has type + It is a call to `cpu-time' from module `chicken.time' which has this type: (-> fixnum fixnum) - This is the expression + This is the expression: (chicken.time#cpu-time) @@ -344,17 +373,17 @@ Warning: Not enough argument values (test-scrutinizer-message-format.scm:XXX) In `m#toplevel-foo', a toplevel procedure In `local-bar', a local procedure In `r-proc-call-argument-value-count', a local procedure - In procedure call + In procedure call: (scheme#vector (scheme#values)) Argument #1 to procedure `vector' does not return any values. - It is a call to `values' from module `scheme' which has type + It is a call to `values' from module `scheme' which has this type: (procedure (#!rest values) . *) - This is the expression + This is the expression: (scheme#values) @@ -367,17 +396,17 @@ Warning: Branch values 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 + In conditional expression: (if (the * 1) 1 (chicken.time#cpu-time)) The branches have different numbers of values. - The true branch returns 1 value + The true branch returns 1 value: 1 - The false branch returns 2 values + The false branch returns 2 values: (chicken.time#cpu-time) @@ -385,33 +414,39 @@ Warning: Invalid procedure 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 + In procedure call: (1 2) - The procedure has invalid type + The procedure expression does not appear to be a callable. - fixnum + This is the expression: - The expected type is + 1 + + The expected type is: (* -> *) + The actual type is: + + fixnum + Note: Predicate is always true (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 procedure call + In procedure call: (scheme#list? '()) The predicate will always return true. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: null @@ -419,17 +454,17 @@ Note: Predicate is always false (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 procedure call + In procedure call: (scheme#symbol? 1) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: fixnum @@ -437,11 +472,11 @@ Note: Test is always true (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 + In conditional expression: (if (scheme#length '()) 1 (##core#undefined)) - Test condition has always true value of type + Test condition has always true value of type: fixnum @@ -449,7 +484,7 @@ Note: Test is always false 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 + In conditional expression: (if #f 1 (##core#undefined)) @@ -459,29 +494,29 @@ 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 + In expression: 1 Expression's declared and actual types do not match. - The actual type is + The declared type is: - fixnum + symbol - The expression's declared type is + The actual type is: - symbol + fixnum Warning: Not enough values (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 + In expression: (scheme#values) - Expression returns 0 values but is declared to return + Expression returns 0 values but is declared to return: symbol @@ -489,13 +524,13 @@ Warning: Too many values (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 + In expression: (scheme#values 1 2) Expression returns too many values. - The expression returns 2 values but is declared to return + The expression returns 2 values but is declared to return: symbol @@ -503,35 +538,35 @@ 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 + In expression: (scheme#values 1 2) Expression's declared and actual types do not match. - The actual type is + The declared type is: - fixnum + symbol - The expression's declared type is + The actual type is: - symbol + fixnum Warning: Invalid assignment 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 + In assignment: (set! m#foo2 1) - Variable `m#foo2' is assigned invalid value. + Variable `foo2' is assigned invalid value. - The assigned value has type + The assigned value has this type: fixnum - The declared type of `m#foo2' is + The declared type of `foo2' from module `m' is: boolean @@ -539,7 +574,7 @@ Warning: Deprecated identifier `deprecated-foo' In `m#toplevel-foo', a toplevel procedure In `local-bar', a local procedure In `r-deprecated-identifier', a local procedure - In expression + In expression: m#deprecated-foo @@ -549,7 +584,7 @@ Warning: Deprecated identifier `deprecated-foo2' In `m#toplevel-foo', a toplevel procedure In `local-bar', a local procedure In `r-deprecated-identifier', a local procedure - In expression + In expression: m#deprecated-foo2 @@ -557,20 +592,35 @@ Warning: Deprecated identifier `deprecated-foo2' The suggested alternative is `foo'. -Warning: In `m#toplevel-foo', a toplevel procedure +Warning: Negative list index (test-scrutinizer-message-format.scm:XXX) + 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 + In procedure call: -Warning: In `m#toplevel-foo', a toplevel procedure + (scheme#list-ref '() -1) + + Procedure `list-ref' from module `scheme' is called with a negative index -1. + +Warning: List index out of range (test-scrutinizer-message-format.scm:XXX) + 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 + In procedure call: -Warning: In `m#toplevel-foo', a toplevel procedure + (scheme#list-ref '() 1) + + Procedure `list-ref' from module `scheme' is called with index `1' for a list of length `0'. + +Warning: Negative vector index (test-scrutinizer-message-format.scm:XXX) + 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 + In procedure call: + + (scheme#vector-ref (scheme#vector) -1) + + Procedure `vector-ref' from module `scheme' is called with a negative index -1. Warning: In `m#toplevel-foo', a toplevel procedure In `local-bar', a local procedure @@ -596,11 +646,11 @@ Note: Test is always true (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 + In conditional expression: (if (scheme#values 1 2) 1 (##core#undefined)) - Test condition has always true value of type + Test condition has always true value of type: fixnum @@ -613,17 +663,17 @@ Error: No typecase match (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 + In `compiler-typecase' expression: (compiler-typecase gXXX (symbol 1) (list 2) (else (##core#undefined))) Tested expression does not match any case. - The expression has type + The expression has this type: fixnum - The specified type cases are these + The specified type cases are these: symbol diff --git a/tests/scrutiny-2.expected b/tests/scrutiny-2.expected index 0c126bf8..78500cdc 100644 --- a/tests/scrutiny-2.expected +++ b/tests/scrutiny-2.expected @@ -3,352 +3,352 @@ Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#pair? p) The predicate will always return true. - Procedure `pair?' from module `scheme' is a predicate for + Procedure `pair?' from module `scheme' is a predicate for: pair - The given argument has type + The given argument has this type: pair Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#pair? l) The predicate will always return false. - Procedure `pair?' from module `scheme' is a predicate for + Procedure `pair?' from module `scheme' is a predicate for: pair - The given argument has type + The given argument has this type: null Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#pair? n) The predicate will always return false. - Procedure `pair?' from module `scheme' is a predicate for + Procedure `pair?' from module `scheme' is a predicate for: pair - The given argument has type + The given argument has this type: null Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#pair? i) The predicate will always return false. - Procedure `pair?' from module `scheme' is a predicate for + Procedure `pair?' from module `scheme' is a predicate for: pair - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#pair? f) The predicate will always return false. - Procedure `pair?' from module `scheme' is a predicate for + Procedure `pair?' from module `scheme' is a predicate for: pair - The given argument has type + The given argument has this type: float Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#list? l) The predicate will always return true. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: null Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#list? n) The predicate will always return true. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: null Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#list? i) The predicate will always return false. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#list? f) The predicate will always return false. - Procedure `list?' from module `scheme' is a predicate for + Procedure `list?' from module `scheme' is a predicate for: list - The given argument has type + The given argument has this type: float Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#null? n) The predicate will always return true. - Procedure `null?' from module `scheme' is a predicate for + Procedure `null?' from module `scheme' is a predicate for: null - The given argument has type + The given argument has this type: null Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#null? l) The predicate will always return true. - Procedure `null?' from module `scheme' is a predicate for + Procedure `null?' from module `scheme' is a predicate for: null - The given argument has type + The given argument has this type: null Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#null? p) The predicate will always return false. - Procedure `null?' from module `scheme' is a predicate for + Procedure `null?' from module `scheme' is a predicate for: null - The given argument has type + The given argument has this type: pair Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#null? i) The predicate will always return false. - Procedure `null?' from module `scheme' is a predicate for + Procedure `null?' from module `scheme' is a predicate for: null - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#null? f) The predicate will always return false. - Procedure `null?' from module `scheme' is a predicate for + Procedure `null?' from module `scheme' is a predicate for: null - The given argument has type + The given argument has this type: float Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#fixnum? i) The predicate will always return true. - Procedure `fixnum?' from module `chicken.base' is a predicate for + Procedure `fixnum?' from module `chicken.base' is a predicate for: fixnum - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#fixnum? f) The predicate will always return false. - Procedure `fixnum?' from module `chicken.base' is a predicate for + Procedure `fixnum?' from module `chicken.base' is a predicate for: fixnum - The given argument has type + The given argument has this type: float Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#flonum? f) The predicate will always return true. - Procedure `flonum?' from module `chicken.base' is a predicate for + Procedure `flonum?' from module `chicken.base' is a predicate for: float - The given argument has type + The given argument has this type: float Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#flonum? i) The predicate will always return false. - Procedure `flonum?' from module `chicken.base' is a predicate for + Procedure `flonum?' from module `chicken.base' is a predicate for: float - The given argument has type + The given argument has this type: fixnum Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#number? i) The predicate will always return true. - Procedure `number?' from module `scheme' is a predicate for + Procedure `number?' from module `scheme' is a predicate for: number - The given argument has type + The given argument has this type: fixnum Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#number? f) The predicate will always return true. - Procedure `number?' from module `scheme' is a predicate for + Procedure `number?' from module `scheme' is a predicate for: number - The given argument has type + The given argument has this type: float Note: Predicate is always true (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#number? u) The predicate will always return true. - Procedure `number?' from module `scheme' is a predicate for + Procedure `number?' from module `scheme' is a predicate for: number - The given argument has type + The given argument has this type: number Note: Predicate is always false (scrutiny-tests-2.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#number? n) The predicate will always return false. - Procedure `number?' from module `scheme' is a predicate for + Procedure `number?' from module `scheme' is a predicate for: number - The given argument has type + The given argument has this type: null diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected index 8210da52..bf66e77d 100644 --- a/tests/scrutiny.expected +++ b/tests/scrutiny.expected @@ -7,165 +7,175 @@ Note: Test is always true In `a', a toplevel procedure In `b', a local procedure In `c', a local procedure - In conditional expression + In conditional expression: (if x 1 2) - Test condition has always true value of type + Test condition has always true value of type: number Note: Test is always true In `b', a toplevel procedure - In conditional expression + In conditional expression: (if x 1 2) - Test condition has always true value of type + Test condition has always true value of type: true Warning: Branch values mismatch (scrutiny-tests.scm:XXX) In `foo', a toplevel procedure - In conditional expression + In conditional expression: (if x (scheme#values 1 2) (scheme#values 1 2 (scheme#+ (scheme#+ ...)))) The branches have different numbers of values. - The true branch returns 2 values + The true branch returns 2 values: (scheme#values 1 2) - The false branch returns 3 values + The false branch returns 3 values: (scheme#values 1 2 (scheme#+ (scheme#+ (scheme#+ ...)))) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (bar 3 'a) - Argument #2 to procedure `bar' has invalid type + Argument #2 to procedure `bar' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `bar' has type + This is the expression: + + 'a + + Procedure `bar' has this type: (#!rest number -> number) Warning: Wrong number of arguments (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string?) Procedure `string?' is called with 0 arguments but 1 argument is expected. - Procedure `string?' from module `scheme' has type + Procedure `string?' from module `scheme' has this type: (* -> boolean) Warning: Too many argument values (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#print (scheme#values 1 2)) Argument #1 to procedure `print' returns 2 values but 1 is expected. - It is a call to `values' from module `scheme' which has type + It is a call to `values' from module `scheme' which has this type: (procedure (#!rest values) . *) - This is the expression + This is the expression: (scheme#values 1 2) Warning: Not enough argument values (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#print (scheme#values)) Argument #1 to procedure `print' does not return any values. - It is a call to `values' from module `scheme' which has type + It is a call to `values' from module `scheme' which has this type: (procedure (#!rest values) . *) - This is the expression + This is the expression: (scheme#values) Warning: Invalid procedure (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (x) - The procedure has invalid type - - fixnum + Variable `x18' is not a procedure. - The expected type is + It has this type: - (-> *) + fixnum Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#+ 'a 'b) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + 'a + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#+ 'a 'b) - Argument #2 to procedure `+' has invalid type + Argument #2 to procedure `+' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + 'b + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid assignment At toplevel - In assignment + In assignment: (set! scheme#car 33) - Variable `scheme#car' is assigned invalid value. + Variable `car' is assigned invalid value. - The assigned value has type + The assigned value has this type: fixnum - The declared type of `scheme#car' is + The declared type of `car' from module `scheme' is: ((pair 'a335 *) -> 'a335) @@ -174,267 +184,309 @@ Warning: At toplevel Warning: Invalid procedure At toplevel - In procedure call + In procedure call: (gXXX) - The procedure has invalid type - - fixnum + Variable `gXXX' is not a procedure. - The expected type is + It has this type: - (-> *) + fixnum Note: Test is always true In `foo', a toplevel procedure - In conditional expression + In conditional expression: (if bar 3 (##core#undefined)) - Test condition has always true value of type + Test condition has always true value of type: (-> *) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo2', a toplevel procedure - In procedure call + In procedure call: (scheme#string-append x "abc") - Argument #1 to procedure `string-append' has invalid type + Argument #1 to procedure `string-append' has an invalid type: number - The expected type is + The expected type is: string - Procedure `string-append' from module `scheme' has type + This is the expression: + + x + + Procedure `string-append' from module `scheme' has this type: (#!rest string -> string) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (foo3 99) - Argument #1 to procedure `foo3' has invalid type + Argument #1 to procedure `foo3' has an invalid type: fixnum - The expected type is + The expected type is: string - Procedure `foo3' has type + This is the expression: + + 99 + + Procedure `foo3' has this type: (string -> string) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo4', a toplevel procedure - In procedure call + In procedure call: (scheme#+ x 1) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: string - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo5', a toplevel procedure - In procedure call + In procedure call: (scheme#+ x 3) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: string - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo6', a toplevel procedure - In procedure call + In procedure call: (scheme#+ x 3) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: string - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#+ x 1) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: string - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In procedure call + In procedure call: (foo9 x) - Argument #1 to procedure `foo9' has invalid type + Argument #1 to procedure `foo9' has an invalid type: number - The expected type is + The expected type is: string - Procedure `foo9' has type + This is the expression: + + x + + Procedure `foo9' has this type: (string -> symbol) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In procedure call + In procedure call: (scheme#+ x 1) - Argument #1 to procedure `+' has invalid type + Argument #1 to procedure `+' has an invalid type: string - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Type mismatch (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In expression + In expression: (scheme#substring x 0 10) Expression's declared and actual types do not match. - The actual type is + The declared type is: - string + pair - The expression's declared type is + The actual type is: - pair + string Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In procedure call + In procedure call: (scheme#string-append (the pair (scheme#substring x 0 10))) - Argument #1 to procedure `string-append' has invalid type + Argument #1 to procedure `string-append' has an invalid type: pair - The expected type is + The expected type is: string - Procedure `string-append' from module `scheme' has type + This is the expression: + + (the pair (scheme#substring x 0 10)) + + Procedure `string-append' from module `scheme' has this type: (#!rest string -> string) Warning: Too many values (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In expression + In expression: (scheme#values 1 2) Expression returns too many values. - The expression returns 2 values but is declared to return + The expression returns 2 values but is declared to return: * Warning: Not enough values (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In expression + In expression: (scheme#values) - Expression returns 0 values but is declared to return + Expression returns 0 values but is declared to return: * Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo10', a toplevel procedure - In procedure call + In procedure call: (scheme#* x y) - Argument #1 to procedure `*' has invalid type + Argument #1 to procedure `*' has an invalid type: string - The expected type is + The expected type is: number - Procedure `*' from module `scheme' has type + This is the expression: + + x + + Procedure `*' from module `scheme' has this type: (#!rest number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `foo#blabla', a toplevel procedure - In procedure call + In procedure call: (scheme#+ 1 'x) - Argument #2 to procedure `+' has invalid type + Argument #2 to procedure `+' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `+' from module `scheme' has type + This is the expression: + + 'x + + Procedure `+' from module `scheme' has this type: (#!rest number -> number) Warning: Deprecated identifier `deprecated-procedure' At toplevel - In expression + In expression: deprecated-procedure @@ -442,7 +494,7 @@ Warning: Deprecated identifier `deprecated-procedure' Warning: Deprecated identifier `another-deprecated-procedure' At toplevel - In expression + In expression: another-deprecated-procedure @@ -452,482 +504,641 @@ Warning: Deprecated identifier `another-deprecated-procedure' Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (apply1 scheme#+ (scheme#list 'a 2 3)) - Argument #2 to procedure `apply1' has invalid type + Argument #2 to procedure `apply1' has an invalid type: (list symbol fixnum fixnum) - The expected type is + The expected type is: (list-of number) - Procedure `apply1' has type + It is a call to `list' from module `scheme' which has this type: + + (#!rest * -> list) + + This is the expression: + + (scheme#list 'a 2 3) + + Procedure `apply1' has this type: ((#!rest 'a143 -> 'b144) (list-of 'a143) -> 'b144) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (apply1 scheme#+ (scheme#cons 'a (scheme#cons 2 (scheme#cons 3 ...)))) - Argument #2 to procedure `apply1' has invalid type + Argument #2 to procedure `apply1' has an invalid type: (list symbol fixnum fixnum) - The expected type is + The expected type is: (list-of number) - Procedure `apply1' has type + It is a call to `cons' from module `scheme' which has this type: + + ('a331 'b332 -> (pair 'a331 'b332)) + + This is the expression: + + (scheme#cons 'a (scheme#cons 2 (scheme#cons 3 '()))) + + Procedure `apply1' has this type: ((#!rest 'a143 -> 'b144) (list-of 'a143) -> 'b144) Note: Predicate is always true (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (chicken.base#fixnum? x) The predicate will always return true. - Procedure `fixnum?' from module `chicken.base' is a predicate for + Procedure `fixnum?' from module `chicken.base' is a predicate for: fixnum - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#symbol? x) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: (or char string) Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? x) The predicate will always return false. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: (not (or char string)) Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (char-or-string? x) The predicate will always return false. - Procedure `char-or-string?' is a predicate for + Procedure `char-or-string?' is a predicate for: (or char string) - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#symbol? x) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: (or char string) Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? x) The predicate will always return false. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: fixnum Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#symbol? x) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: char Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? x) The predicate will always return false. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: symbol Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#symbol? x) The predicate will always return false. - Procedure `symbol?' from module `scheme' is a predicate for + Procedure `symbol?' from module `scheme' is a predicate for: symbol - The given argument has type + The given argument has this type: (or char string) Note: Predicate is always false (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? x) The predicate will always return false. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: symbol Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (f (scheme#list)) - Argument #1 to procedure `f' has invalid type + Argument #1 to procedure `f' has an invalid type: null - The expected type is + The expected type is: pair - Procedure `f' has type + It is a call to `list' from module `scheme' which has this type: + + (#!rest * -> list) + + This is the expression: + + (scheme#list) + + Procedure `f' has this type: (pair -> *) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (f (scheme#list 1)) - Argument #1 to procedure `f' has invalid type + Argument #1 to procedure `f' has an invalid type: (list fixnum) - The expected type is + The expected type is: null - Procedure `f' has type + It is a call to `list' from module `scheme' which has this type: + + (#!rest * -> list) + + This is the expression: + + (scheme#list 1) + + Procedure `f' has this type: (null -> *) Warning: Invalid argument (scrutiny-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (f (scheme#cons 1 2)) - Argument #1 to procedure `f' has invalid type + Argument #1 to procedure `f' has an invalid type: (pair fixnum fixnum) - The expected type is + The expected type is: list - Procedure `f' has type + It is a call to `cons' from module `scheme' which has this type: + + ('a331 'b332 -> (pair 'a331 'b332)) + + This is the expression: + + (scheme#cons 1 2) + + Procedure `f' has this type: (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: Negative vector index (scrutiny-tests.scm:XXX) + In `vector-ref-warn1', a toplevel procedure + In procedure call: -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 + (scheme#vector-ref v1 -1) -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 + Procedure `vector-ref' from module `scheme' is called with a negative index -1. + +Warning: Vector index out of range (scrutiny-tests.scm:XXX) + In `vector-ref-warn2', a toplevel procedure + In procedure call: + + (scheme#vector-ref v1 3) + + Procedure `vector-ref' from module `scheme' is called with index `3' for a vector of length `3'. + +Warning: Vector index out of range (scrutiny-tests.scm:XXX) + In `vector-ref-warn3', a toplevel procedure + In procedure call: + + (scheme#vector-ref v1 4) + + Procedure `vector-ref' from module `scheme' is called with index `4' for a vector of length `3'. Warning: Invalid argument (scrutiny-tests.scm:XXX) In `vector-ref-standard-warn1', a toplevel procedure - In procedure call + In procedure call: (scheme#vector-ref v1 'bad) - Argument #2 to procedure `vector-ref' has invalid type + Argument #2 to procedure `vector-ref' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `vector-ref' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `vector-ref' from module `scheme' has this type: ((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: Negative vector index (scrutiny-tests.scm:XXX) + In `vector-set!-warn1', a toplevel procedure + In procedure call: -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 + (scheme#vector-set! v1 -1 'whatever) -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 + Procedure `vector-set!' from module `scheme' is called with a negative index -1. + +Warning: Vector index out of range (scrutiny-tests.scm:XXX) + In `vector-set!-warn2', a toplevel procedure + In procedure call: + + (scheme#vector-set! v1 3 'whatever) + + Procedure `vector-set!' from module `scheme' is called with index `3' for a vector of length `3'. + +Warning: Vector index out of range (scrutiny-tests.scm:XXX) + In `vector-set!-warn3', a toplevel procedure + In procedure call: + + (scheme#vector-set! v1 4 'whatever) + + Procedure `vector-set!' from module `scheme' is called with index `4' for a vector of length `3'. Warning: Invalid argument (scrutiny-tests.scm:XXX) In `vector-set!-standard-warn1', a toplevel procedure - In procedure call + In procedure call: (scheme#vector-set! v1 'bad 'whatever) - Argument #2 to procedure `vector-set!' has invalid type + Argument #2 to procedure `vector-set!' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `vector-set!' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `vector-set!' from module `scheme' has this type: (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: Negative list index (scrutiny-tests.scm:XXX) + In `list-ref-warn1', a toplevel procedure + In procedure call: + + (scheme#list-ref l1 -1) + + Procedure `list-ref' from module `scheme' is called with a negative index -1. + +Warning: Negative list index (scrutiny-tests.scm:XXX) + In `list-ref-warn2', a toplevel procedure + In procedure call: + + (scheme#list-ref l2 -1) + + Procedure `list-ref' from module `scheme' is called with a negative index -1. + +Warning: Negative list index (scrutiny-tests.scm:XXX) + In `list-ref-warn3', a toplevel procedure + In procedure call: + + (scheme#list-ref l3 -1) -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 + Procedure `list-ref' from module `scheme' is called with a negative index -1. -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: List index out of range (scrutiny-tests.scm:XXX) + In `list-ref-warn4', a toplevel procedure + In procedure call: -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 + (scheme#list-ref l1 3) -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 + Procedure `list-ref' from module `scheme' is called with index `3' for a list of length `3'. + +Warning: List index out of range (scrutiny-tests.scm:XXX) + In `list-ref-warn5', a toplevel procedure + In procedure call: + + (scheme#list-ref l1 4) + + Procedure `list-ref' from module `scheme' is called with index `4' for a list of length `3'. Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-standard-warn1', a toplevel procedure - In procedure call + In procedure call: (scheme#list-ref l1 'bad) - Argument #2 to procedure `list-ref' has invalid type + Argument #2 to procedure `list-ref' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `list-ref' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `list-ref' from module `scheme' has this type: ((list-of 'a366) fixnum -> 'a366) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-standard-warn2', a toplevel procedure - In procedure call + In procedure call: (scheme#list-ref l1 'bad) - Argument #2 to procedure `list-ref' has invalid type + Argument #2 to procedure `list-ref' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `list-ref' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `list-ref' from module `scheme' has this type: ((list-of 'a366) fixnum -> 'a366) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-standard-warn3', a toplevel procedure - In procedure call + In procedure call: (scheme#list-ref l2 'bad) - Argument #2 to procedure `list-ref' has invalid type + Argument #2 to procedure `list-ref' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `list-ref' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `list-ref' from module `scheme' has this type: ((list-of 'a366) fixnum -> 'a366) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-standard-warn4', a toplevel procedure - In procedure call + In procedure call: (scheme#list-ref l2 'bad) - Argument #2 to procedure `list-ref' has invalid type + Argument #2 to procedure `list-ref' has an invalid type: symbol - The expected type is + The expected type is: fixnum - Procedure `list-ref' from module `scheme' has type + This is the expression: + + 'bad + + Procedure `list-ref' from module `scheme' has this type: ((list-of 'a366) fixnum -> 'a366) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-type-warn1', a toplevel procedure - In procedure call + In procedure call: (chicken.base#add1 (scheme#list-ref l1 1)) - Argument #1 to procedure `add1' has invalid type + Argument #1 to procedure `add1' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `add1' from module `chicken.base' has type + It is a call to `list-ref' from module `scheme' which has this type: + + ((list-of 'a366) fixnum -> 'a366) + + This is the expression: + + (scheme#list-ref l1 1) + + Procedure `add1' from module `chicken.base' has this type: (number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-type-warn2', a toplevel procedure - In procedure call + In procedure call: (chicken.base#add1 (scheme#list-ref l2 1)) - Argument #1 to procedure `add1' has invalid type + Argument #1 to procedure `add1' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `add1' from module `chicken.base' has type + It is a call to `list-ref' from module `scheme' which has this type: + + ((list-of 'a366) fixnum -> 'a366) + + This is the expression: + + (scheme#list-ref l2 1) + + Procedure `add1' from module `chicken.base' has this type: (number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `list-ref-type-warn3', a toplevel procedure - In procedure call + In procedure call: (chicken.base#add1 (scheme#list-ref l3 1)) - Argument #1 to procedure `add1' has invalid type + Argument #1 to procedure `add1' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `add1' from module `chicken.base' has type + It is a call to `list-ref' from module `scheme' which has this type: + + ((list-of 'a366) fixnum -> 'a366) + + This is the expression: + + (scheme#list-ref l3 1) + + Procedure `add1' from module `chicken.base' has this type: (number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `append-result-type-warn1', a toplevel procedure - In procedure call + In procedure call: (chicken.base#add1 (scheme#list-ref l1 1)) - Argument #1 to procedure `add1' has invalid type + Argument #1 to procedure `add1' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `add1' from module `chicken.base' has type + It is a call to `list-ref' from module `scheme' which has this type: + + ((list-of 'a366) fixnum -> 'a366) + + This is the expression: + + (scheme#list-ref l1 1) + + Procedure `add1' from module `chicken.base' has this type: (number -> number) Warning: Invalid argument (scrutiny-tests.scm:XXX) In `append-result-type-warn2', a toplevel procedure - In procedure call + In procedure call: (chicken.base#add1 (scheme#list-ref l3 3)) - Argument #1 to procedure `add1' has invalid type + Argument #1 to procedure `add1' has an invalid type: symbol - The expected type is + The expected type is: number - Procedure `add1' from module `chicken.base' has type + It is a call to `list-ref' from module `scheme' which has this type: + + ((list-of 'a366) fixnum -> 'a366) + + This is the expression: + + (scheme#list-ref l3 3) + + Procedure `add1' from module `chicken.base' has this type: (number -> number) diff --git a/tests/specialization.expected b/tests/specialization.expected index 20a2e1d4..57ce4feb 100644 --- a/tests/specialization.expected +++ b/tests/specialization.expected @@ -3,49 +3,49 @@ Note: Predicate is always true (specialization-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? a) The predicate will always return true. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: string Note: Test is always true (specialization-tests.scm:XXX) At toplevel - In conditional expression + In conditional expression: (if (scheme#string? a) 'ok 'no) - Test condition has always true value of type + Test condition has always true value of type: true Note: Predicate is always false (specialization-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#string? a) The predicate will always return false. - Procedure `string?' from module `scheme' is a predicate for + Procedure `string?' from module `scheme' is a predicate for: string - The given argument has type + The given argument has this type: symbol Note: Test is always false (specialization-tests.scm:XXX) At toplevel - In conditional expression + In conditional expression: (if (scheme#string? a) 'ok 'no) @@ -53,52 +53,52 @@ Note: Test is always false (specialization-tests.scm:XXX) Note: Predicate is always true (specialization-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#input-port? p) The predicate will always return true. - Procedure `input-port?' from module `scheme' is a predicate for + Procedure `input-port?' from module `scheme' is a predicate for: input-port - The given argument has type + The given argument has this type: input/output-port Note: Test is always true (specialization-tests.scm:XXX) At toplevel - In conditional expression + In conditional expression: (if (scheme#input-port? p) 'ok 'no) - Test condition has always true value of type + Test condition has always true value of type: true Note: Predicate is always true (specialization-tests.scm:XXX) At toplevel - In procedure call + In procedure call: (scheme#output-port? p) The predicate will always return true. - Procedure `output-port?' from module `scheme' is a predicate for + Procedure `output-port?' from module `scheme' is a predicate for: output-port - The given argument has type + The given argument has this type: input/output-port Note: Test is always true (specialization-tests.scm:XXX) At toplevel - In conditional expression + In conditional expression: (if (scheme#output-port? p) 'ok 'no) - Test condition has always true value of type + Test condition has always true value of type: trueTrap