~ chicken-core (chicken-5) af18bae84421be691356f48fcd6ca450ae2439db
commit af18bae84421be691356f48fcd6ca450ae2439db Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Aug 22 19:25:27 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Aug 22 19:25:27 2011 +0200 documented struct types; allow bare type names for core struct types diff --git a/defaults.make b/defaults.make index 54da6595..79836c2e 100644 --- a/defaults.make +++ b/defaults.make @@ -277,7 +277,7 @@ else CHICKEN_OPTIONS += -no-warnings endif ifndef BUILDING_CHICKEN_BOOT -CHICKEN_OPTIONS += -specialize +#XXX CHICKEN_OPTIONS += -specialize endif CHICKEN_OPTIONS += $(EXTRA_CHICKEN_OPTIONS) CHICKEN_LIBRARY_OPTIONS = $(CHICKEN_OPTIONS) -explicit-use -no-trace diff --git a/manual/Types b/manual/Types index 57af5c1a..1144184e 100644 --- a/manual/Types +++ b/manual/Types @@ -144,6 +144,32 @@ or {{:}} should follow the syntax given below: (*) Note: no type-variables are bound inside {{(not TYPE)}}. +Some types are internally represented as structure types, but you can also use +these names directly in type-specifications - {{TYPE}} corresponds to +{{(struct TYPE)}} in this case: + +<table> +<tr><th>Structure type</th><th>meaning</th></tr> +<tr><td>{{u8vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{s8vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{u16vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{s16vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{u32vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{s32vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{f32vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{f64vector}}</td><td>SRFI-4 byte vector</td></tr> +<tr><td>{{thread}}</td><td>SRFI-18 thread</td></tr> +<tr><td>{{queue}}</td><td></td>see "data-structures" unit</tr> +<tr><td>{{environment}}</td><td>evaluation environment</td></tr> +<tr><td>{{time}}</td><td>SRFI-18 "time" object</td></tr> +<tr><td>{{continuation}}</td><td>continuation object</td></tr> +<tr><td>{{lock}}</td><td>lock object from "posix" unit</td></tr> +<tr><td>{{mmap}}</td><td>memory mapped file</td></tr> +<tr><td>{{condition}}</td><td>object representing exception</td></tr> +<tr><td>{{hash-table}}</td><td>SRFI-69 hash-table</td></tr> +<tr><td>{{tcp-listener}}</td><td>listener object from "tcp" unit</td></tr> +</table> + ==== Predicates diff --git a/scrutinizer.scm b/scrutinizer.scm index 5a2629c8..6cbcbe0d 100755 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -316,7 +316,6 @@ (else (let-values (((atypes values-rest) (procedure-argument-types ptype nargs typeenv))) - (d " argument-types: ~a (~a)" atypes values-rest) (unless (= (length atypes) nargs) (let ((alen (length atypes))) (report @@ -1608,6 +1607,7 @@ (define (validate-type type name) ;; - returns converted type or #f ;; - also converts "(... -> ...)" types + ;; - converts some typenames to struct types (u32vector, etc.) ;; - drops "#!key ..." args by converting to #!rest ;; - handles "(T1 -> T2 : T3)" (predicate) ;; - simplifies result @@ -1644,6 +1644,11 @@ pointer locative fixnum float pointer-vector deprecated noreturn values)) t) + ((memq t '(u8vector s8vector u16vector s16vector u32vector s32vector + f32vector f64vector thread queue environment time + continuation lock mmap condition hash-table + tcp-listener)) + `(struct ,t)) ((not (pair? t)) (cond ((memq t typevars) (set! usedvars (cons t usedvars))Trap