~ chicken-core (chicken-5) 1939cbb960ab5105c8c93b188939ce424c3e7549
commit 1939cbb960ab5105c8c93b188939ce424c3e7549
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Feb 16 09:29:11 2016 +1300
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sat Feb 20 13:56:02 2016 +0100
Allow compatible types, not just subtypes, in (the ...) declarations
Add "the" declaration to parameterize to allow compilation
with -strict-types (thanks to Joerg Wittenberger)
Signed-off-by: Peter Bex <peter@more-magic.net>
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 0ccf0c48..79251957 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -279,6 +279,8 @@
(##sys#check-syntax 'parameterize form '#(_ 2))
(let* ((bindings (cadr form))
(body (cddr form))
+ (the (r 'the))
+ (boolean (r 'boolean))
(convert? (r 'convert?))
(params (##sys#map car bindings))
(vals (##sys#map cadr bindings))
@@ -290,7 +292,7 @@
(##core#let
,(map ##sys#list saveds vals)
(##core#let
- ((,convert? #t)) ; Convert only first time extent is entered!
+ ((,convert? (,the ,boolean #t))) ; Convert only first time extent is entered!
(##sys#dynamic-wind
(##core#lambda ()
(##core#let
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 228d7235..da897658 100644
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -811,11 +811,11 @@
"expression returns ~a values but is declared to have \
a single result" (length rt)))
(when (and (second params)
- (not (type<=? t (first rt))))
+ (not (compatible-types? t (first rt))))
((if strict-variable-types report-error report-notice)
loc
"expression returns a result of type `~a' but is \
- declared to return `~a', which is not a subtype"
+ declared to return `~a', which is not compatible"
(first rt) t))))
(list t)))
((##core#typecase)
diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected
index e7b28cb2..6811bee3 100644
--- a/tests/scrutiny.expected
+++ b/tests/scrutiny.expected
@@ -76,7 +76,7 @@ Warning: in toplevel procedure `foo10':
(scrutiny-tests.scm:105) in procedure call to `+', expected argument #1 of type `number' but was given an argument of type `string'
Note: in toplevel procedure `foo10':
- expression returns a result of type `string' but is declared to return `pair', which is not a subtype
+ expression returns a result of type `string' but is declared to return `pair', which is not compatible
Warning: in toplevel procedure `foo10':
(scrutiny-tests.scm:109) in procedure call to `string-append', expected argument #1 of type `string' but was given an argument of type `pair'
@@ -84,9 +84,6 @@ Warning: in toplevel procedure `foo10':
Warning: in toplevel procedure `foo10':
expression returns 2 values but is declared to have a single result
-Note: in toplevel procedure `foo10':
- expression returns a result of type `fixnum' but is declared to return `*', which is not a subtype
-
Warning: in toplevel procedure `foo10':
expression returns zero values but is declared to have a single result of type `*'
Trap