~ chicken-core (chicken-5) f54fd27aa740b98b4848ed1c2676fed72ee77ffb
commit f54fd27aa740b98b4848ed1c2676fed72ee77ffb
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue May 10 07:47:57 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue May 10 07:47:57 2011 +0200
strict-types declaration
diff --git a/batch-driver.scm b/batch-driver.scm
index 956a0cff..2d663196 100644
--- a/batch-driver.scm
+++ b/batch-driver.scm
@@ -263,7 +263,9 @@
(symbol-escape #f) )
(set! verbose-mode verbose)
(set! strict-variable-types (memq 'strict-types options))
- (when strict-variable-types (set! enable-specialization #t))
+ (when strict-variable-types
+ (set! enable-specialization #t)
+ (set! do-scrutinize #t))
(set! ##sys#read-error-with-line-number #t)
(set! ##sys#include-pathnames
(append (map chop-separator (collect-options 'include-path))
@@ -535,7 +537,7 @@
(load-inline-file ilf) )
ifs)))
- (when (or strict-variable-types do-scrutinize enable-specialization)
+ (when (or do-scrutinize enable-specialization)
;;XXX hardcoded database file name
(unless (memq 'ignore-repository options)
(load-type-database "types.db"))
diff --git a/compiler.scm b/compiler.scm
index 6494cdf9..53d0d896 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -71,6 +71,7 @@
; (unsafe)
; (unused <symbol> ...)
; (uses {<unitname>})
+; (strict-types)
; (specialize)
;
; <type> = fixnum | generic
@@ -1524,6 +1525,8 @@
(globalize-all (cdr spec))))
((specialize)
(set! enable-specialization #t))
+ ((strict-types)
+ (set! strict-variable-types #t))
(else (warning "unknown declaration specifier" spec)) )
'(##core#undefined) ) ) )
diff --git a/manual/Declarations b/manual/Declarations
index c6af35d4..6ebc8268 100644
--- a/manual/Declarations
+++ b/manual/Declarations
@@ -264,7 +264,7 @@ procedures.
Enables scrutiny. This is equivalent to passing the {{-scrutinize}} option to the compiler.
-=== specializat
+=== specialize
[declaration specifier] (specialize)
@@ -282,6 +282,13 @@ then all but the given standard bindings are assumed to be never
redefined.
+=== strict-types
+
+ [declaration specifier] (strict-types)
+
+Declares that the type of variables is not changed by assignment. Equivalent to giving the {{-strict-types}} compiler option.
+
+
=== type
[declaration specifier] (type (SYMBOL TYPE) ...)
diff --git a/manual/Using the compiler b/manual/Using the compiler
index 31334746..284c0c3b 100644
--- a/manual/Using the compiler
+++ b/manual/Using the compiler
@@ -159,7 +159,7 @@ the source text should be read from standard input.
; -static-extension NAME : similar to {{-require-extension NAME}}, but links extension statically (also applies for an explicit {{(require-extension NAME)}}).
-; -strict-types : Assume that the type of variables does not change because of assignments. This gives more type-information during specialization, but violating this assumption will result in unsafe and incorrectly behaving code.
+; -strict-types : Assume that the type of variables is not changed by assignments. This gives more type-information during specialization, but violating this assumption will result in unsafe and incorrectly behaving code.
; -types FILENAME : load additional type database from {{FILENAME}}. Type-definitions in {{FILENAME}} will override previous type-definitions.
Trap