~ chicken-core (chicken-5) 413d127e61f167356c18dfed8b48e880915f8494
commit 413d127e61f167356c18dfed8b48e880915f8494 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon May 30 14:01:56 2011 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon May 30 14:01:56 2011 +0200 better check in type-validation; nicer predicate-specification in types.db; updated scrutiny.expected diff --git a/scrutinizer.scm b/scrutinizer.scm index 52b5751e..1d6fda9e 100755 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -990,33 +990,67 @@ (printf "loading type database ~a ...~%" dbfile)) (for-each (lambda (e) - (cond ((eq? '#%predicate (car e)) - (mark-variable (cadr e) '##compiler#predicate (caddr e))) - (else - (let* ((name (car e)) - (old (variable-mark name '##compiler#type)) - (new (cadr e)) - (specs (and (pair? (cddr e)) (cddr e)))) - (when (and (pair? new) (eq? 'procedure! (car new))) - (mark-variable name '##compiler#enforce #t) - (set-car! new 'procedure)) - (cond-expand - (debugbuild - (let-values (((t _) (validate-type new name))) - (unless t - (warning "invalid type specification" name new)))) - (else)) - (when (and old (not (compatible-types? old new))) - (##sys#notice - (sprintf - "type-definition `~a' for toplevel binding `~a' conflicts with previously loaded type `~a'" - name new old))) - (mark-variable name '##compiler#type new) - (when specs - ;;XXX validate types in specs - (mark-variable name '##compiler#specializations specs)))))) + (let* ((name (car e)) + (old (variable-mark name '##compiler#type)) + (new (cadr e)) + (specs (and (pair? (cddr e)) (cddr e)))) + (when (pair? new) + (case (car new) + ((procedure!) + (mark-variable name '##compiler#enforce #t) + (set-car! new 'procedure)) + ((procedure!? procedure?!) + (mark-variable name '##compiler#enforce #t) + (mark-variable name '##compiler#predicate (cadr new)) + (set! new (cons 'procedure (cddr new)))) + ((procedure?) + (mark-variable name '##compiler#predicate (cadr new)) + (set! new (cons 'procedure (cddr new)))))) + (cond-expand + (debugbuild + (let-values (((t _) (validate-type new name))) + (unless t + (warning "invalid type specification" name new)))) + (else)) + (when (and old (not (compatible-types? old new))) + (##sys#notice + (sprintf + "type-definition `~a' for toplevel binding `~a' conflicts with previously loaded type `~a'" + name new old))) + (mark-variable name '##compiler#type new) + (when specs + ;;XXX validate types in specs + (mark-variable name '##compiler#specializations specs)))) (read-file dbfile)))) +(define (emit-type-file filename db) + (with-output-to-file filename + (lambda () + (print "; GENERATED BY CHICKEN " (chicken-version) " FROM " + source-filename "\n") + (##sys#hash-table-for-each + (lambda (sym plist) + (when (variable-visible? sym) + (when (variable-mark sym '##compiler#declared-type) + (let ((specs + (or (variable-mark sym '##compiler#specializations) '())) + (type (variable-mark sym '##compiler#type)) + (pred (variable-mark sym '##compiler#predicate)) + (enforce (variable-mark sym '##compiler#enforce))) + (pp (cons* + sym + (if (and (pair? type) (eq? 'procedure (car type))) + `(,(cond ((and enforce pred) 'procedure!?) + (pred 'procedure?) + (enforce 'procedure!) + (else 'procedure)) + ,@(if pred (list pred) '()) + ,@(cdr type)) + type) + specs)))))) + db) + (print "; END OF FILE")))) + (define (match-specialization typelist atypes exact) ;; - does not accept complex procedure types in typelist! ;; - "exact" means: "or"-type in atypes is not allowed @@ -1112,9 +1146,9 @@ (cond ((memq t '(* string symbol char number boolean list pair procedure vector null eof undefined port blob pointer locative fixnum float pointer-vector - deprecated)) + deprecated noreturn values)) t) - ((not (pair? t)) t) + ((not (pair? t)) #f) ((eq? 'or (car t)) (and (list? t) (let ((ts (map validate (cdr t)))) diff --git a/support.scm b/support.scm index af765114..fc90f22d 100644 --- a/support.scm +++ b/support.scm @@ -737,33 +737,6 @@ (loop))))))) -;;; write declared types to file - -(define (emit-type-file filename db) - (with-output-to-file filename - (lambda () - (print "; GENERATED BY CHICKEN " (chicken-version) " FROM " - source-filename "\n") - (##sys#hash-table-for-each - (lambda (sym plist) - (when (variable-visible? sym) - (when (variable-mark sym '##compiler#declared-type) - (let ((specs - (or (variable-mark sym '##compiler#specializations) '())) - (type (variable-mark sym '##compiler#type))) - (pp (cons* - sym - (if (and (pair? type) (eq? 'procedure (car type)) - (variable-mark sym '##compiler#enforce)) - `(procedure! ,@(cdr type)) - type) - specs)) - (and-let* ((ptype (variable-mark sym '##compiler#predicate))) - (pp `(#%predicate ,sym ,ptype))))))) - db) - (print "; END OF FILE")))) - - ;;; Match node-structure with pattern: (define (match-node node pat vars) diff --git a/tests/scrutiny-tests.scm b/tests/scrutiny-tests.scm index 25216f39..92557d31 100644 --- a/tests/scrutiny-tests.scm +++ b/tests/scrutiny-tests.scm @@ -82,8 +82,8 @@ (+ x 3))) ;XXX (+ y 3) does not work yet ;; user-defined predicate -(: foo7 (* -> bool : string)) -(define (foo7 x) (string x)) +(: foo7 (* -> boolean : string)) +(define (foo7 x) (string? x)) (when (foo7 x) (+ x 1)) ; will warn about "x" being a string diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected index 893c0e96..6a81ff9c 100644 --- a/tests/scrutiny.expected +++ b/tests/scrutiny.expected @@ -60,4 +60,10 @@ Warning: in toplevel procedure `foo5': Warning: in toplevel procedure `foo6': scrutiny-tests.scm:82: in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' +Warning: at toplevel: + scrutiny-tests.scm:89: in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + +Warning: in toplevel procedure `foo9': + scrutiny-tests.scm:97: in procedure call to `+', expected argument #1 of type `number', but was given an argument of type `string' + Warning: redefinition of standard binding: car diff --git a/types.db b/types.db index fb3cc44f..dfcc02e3 100644 --- a/types.db +++ b/types.db @@ -32,9 +32,11 @@ ; - in templates, "#(INDEX)" refers to the INDEXth argument (starting from 1) ; - in templates "(let ((#:tmp X)) ...)" binds X to a temporary variable, you can not ; refer to this variable inside the template -; - the entry "(#%predicate NAME TYPE)" specifies a predicate over the given type ; - a type of the form "(procedure! ...)" is internally treated like "(procedure ..." ; but declares the procedure as "argument-type enforcing" +; - a type of the form "(procedure? TYPE ...)" is internally treated like "(procedure ..." +; but declares the procedure as a predicate over TYPE. +; - a type of the form "(procedure!? TYPE ...)" or "(procedure?! TYPE ...)" is the obvious. ;; scheme @@ -42,8 +44,7 @@ (not (procedure not (*) boolean) (((not boolean)) (let ((#:tmp #(1))) '#t))) -(boolean? (procedure boolean? (*) boolean)) -(#%predicate boolean? boolean) +(boolean? (procedure? boolean boolean? (*) boolean)) (eq? (procedure eq? (* *) boolean)) @@ -55,8 +56,7 @@ (((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2))) ((* (or fixnum symbol char eof null undefined) (eq? #(1) #(2))))) -(pair? (procedure pair? (*) boolean)) -(#%predicate pair? pair) +(pair? (procedure? pair pair? (*) boolean)) (cons (procedure cons (* *) pair)) @@ -95,11 +95,9 @@ (set-car! (procedure! set-car! (pair *) undefined) ((pair *) (##sys#setslot #(1) '0 #(2)))) (set-cdr! (procedure! set-cdr! (pair *) undefined) ((pair *) (##sys#setslot #(1) '1 #(2)))) -(null? (procedure null? (*) boolean)) -(#%predicate null? null) +(null? (procedure? null null? (*) boolean)) -(list? (procedure list? (*) boolean)) -(#%predicate list? list) +(list? (procedure? list list? (*) boolean)) (list (procedure list (#!rest) list)) (length (procedure! length (list) fixnum) ((list) (##core#inline "C_u_i_length" #(1)))) @@ -114,32 +112,25 @@ (assv (procedure assv (* list) *)) (assoc (procedure assoc (* list #!optional (procedure (* *) *)) *)) -(symbol? (procedure symbol? (*) boolean)) -(#%predicate symbol? symbol) +(symbol? (procedure? symbol symbol? (*) boolean)) (symbol-append (procedure! symbol-append (#!rest symbol) symbol)) (symbol->string (procedure! symbol->string (symbol) string)) (string->symbol (procedure! string->symbol (string) symbol)) -(number? (procedure number? (*) boolean)) -(#%predicate number? number) +(number? (procedure? number number? (*) boolean)) +;;XXX predicate? (integer? (procedure integer? (*) boolean) ((fixnum) (let ((#:tmp #(1))) '#t)) ((float) (##core#inline "C_u_i_fpintegerp" #(1)))) -(exact? (procedure exact? (*) boolean)) -(#%predicate exact? fixnum) - -(real? (procedure real? (*) boolean)) -(#%predicate real? number) - -(complex? (procedure complex? (*) boolean)) -(#%predicate complex? number) - -(inexact? (procedure inexact? (*) boolean)) -(#%predicate inexact? float) +(exact? (procedure? fixnum exact? (*) boolean)) +(real? (procedure? number real? (*) boolean)) +(complex? (procedure? number complex? (*) boolean)) +(inexact? (procedure? float inexact? (*) boolean)) +;;XXX predicate? (rational? (procedure rational? (*) boolean) ((fixnum) (let ((#:tmp #(1))) '#t))) @@ -377,8 +368,7 @@ (string->number (procedure! string->number (string #!optional number) (or number boolean))) -(char? (procedure char? (*) boolean)) -(#%predicate char? char) +(char? (procedure? char char? (*) boolean)) ;; we could rewrite these, but this is done by the optimizer anyway (safe) (char=? (procedure! char=? (char char) boolean)) @@ -403,8 +393,7 @@ (char->integer (procedure! char->integer (char) fixnum)) (integer->char (procedure! integer->char (fixnum) char)) -(string? (procedure string? (*) boolean)) -(#%predicate string? string) +(string? (procedure? string string? (*) boolean)) (string=? (procedure! string=? (string string) boolean) ((string string) (##core#inline "C_u_i_string_equal_p" #(1) #(2)))) @@ -443,8 +432,7 @@ ;(string-fill! (procedure! string-fill! (string char) string)) - s.a. (string (procedure! string (#!rest char) string)) -(vector? (procedure vector? (*) boolean)) -(#%predicate vector? vector) +(vector? (procedure? vector vector? (*) boolean)) (make-vector (procedure! make-vector (fixnum #!optional *) vector)) @@ -459,8 +447,7 @@ (list->vector (procedure! list->vector (list) vector)) (vector-fill! (procedure! vector-fill! (vector *) vector)) -(procedure? (procedure procedure? (*) boolean)) -(#%predicate procedure? procedure) +(procedure? (procedure? procedure procedure? (*) boolean)) (vector-copy! (procedure! vector-copy! (vector vector #!optional fixnum) undefined)) (map (procedure! map (procedure #!rest list) list)) @@ -481,8 +468,7 @@ (load (procedure load (string #!optional procedure) undefined)) (read (procedure! read (#!optional port) *)) -(eof-object? (procedure eof-object? (*) boolean)) -(#%predicate eof-object? eof) +(eof-object? (procedure? eof eof-object? (*) boolean)) ;;XXX if we had input/output port distinction, we could specialize these: (read-char (procedure! read-char (#!optional port) *)) ; result (or eof char) ? @@ -559,8 +545,7 @@ (blob-size (procedure! blob-size (blob) fixnum) ((blob) (##sys#size #(1)))) -(blob? (procedure blob? (*) boolean)) -(#%predicate blob? blob) +(blob? (procedure? blob blob? (*) boolean)) (blob=? (procedure! blob=? (blob blob) boolean)) (breakpoint (procedure breakpoint (#!optional *) . *)) @@ -574,16 +559,14 @@ (condition-predicate (procedure! condition-predicate (symbol) (procedure ((struct condition)) boolean))) (condition-property-accessor (procedure! condition-property-accessor (symbol symbol #!optional *) (procedure ((struct condition)) *))) -(condition? (procedure condition? (*) boolean)) -(#%predicate condition? (struct condition)) +(condition? (procedure? (struct condition) condition? (*) boolean)) (condition->list (procedure! condition->list ((struct condition)) list)) (continuation-capture (procedure! continuation-capture ((procedure ((struct continuation)) . *)) *)) (continuation-graft (procedure! continuation-graft ((struct continuation) (procedure () . *)) *)) (continuation-return (procedure! continuation-return (procedure #!rest) . *)) ;XXX make return type more specific? -(continuation? (procedure continuation? (*) boolean)) -(#%predicate continuation (struct continuation)) +(continuation? (procedure? (struct continuation) continuation? (*) boolean)) (copy-read-table (procedure! copy-read-table ((struct read-table)) (struct read-table))) (cpu-time (procedure cpu-time () fixnum fixnum)) @@ -618,8 +601,7 @@ (fixnum-bits fixnum) (fixnum-precision fixnum) -(fixnum? (procedure fixnum? (*) boolean)) -(#%predicate fixnum? fixnum) +(fixnum? (procedure? fixnum fixnum? (*) boolean)) (flonum-decimal-precision fixnum) (flonum-epsilon float) @@ -631,8 +613,7 @@ (flonum-print-precision (procedure! (#!optional fixnum) fixnum)) (flonum-radix fixnum) -(flonum? (procedure flonum? (*) boolean)) -(#%predicate flonum? float) +(flonum? (procedure? float flonum? (*) boolean)) (flush-output (procedure! flush-output (#!optional port) undefined)) (force-finalizers (procedure force-finalizers () undefined)) @@ -790,8 +771,7 @@ (port-position (procedure! port-position (#!optional port) fixnum)) -(port? (procedure port? (*) boolean)) -(#%predicate port? port) +(port? (procedure? port port? (*) boolean)) (print (procedure print (#!rest *) undefined)) (print-call-chain (procedure! print-call-chain (#!optional port fixnum * string) undefined)) @@ -956,15 +936,16 @@ (((struct queue)) (##sys#slot #(1) '1))) (queue-add! (procedure! queue-add! ((struct queue) *) undefined)) -(queue-empty? (procedure! queue-empty? ((struct queue)) boolean)) + +(queue-empty? (procedure! queue-empty? ((struct queue)) boolean) + (((struct queue)) (##core#inline "C_i_nullp" (##sys#slot #(1) '1)))) + (queue-first (procedure! queue-first ((struct queue)) *)) (queue-last (procedure! queue-last ((struct queue)) *)) (queue-push-back! (procedure! queue-push-back! ((struct queue) *) undefined)) (queue-push-back-list! (procedure! queue-push-back-list! ((struct queue) list) undefined)) (queue-remove! (procedure! queue-remove! ((struct queue)) *)) - -(queue? (procedure queue? (*) boolean)) -(#%predicate queue? (struct queue)) +(queue? (procedure? (struct queue) queue? (*) boolean)) (rassoc (procedure! rassoc (* list #!optional (procedure (* *) *)) *)) (reverse-string-append (procedure! reverse-string-append (list) string)) @@ -982,8 +963,15 @@ (string-translate (procedure! string-translate (string * #!optional *) string)) (string-translate* (procedure! string-translate* (string list) string)) (substring-ci=? (procedure! substring-ci=? (string string #!optional fixnum fixnum fixnum) boolean)) -(substring-index (procedure! substring-index (string string #!optional fixnum) *)) -(substring-index-ci (procedure! substring-index-ci (string string #!optional fixnum) *)) + +(substring-index (procedure! substring-index (string string #!optional fixnum) *) + ((* *) (##sys#substring-index #(1) #(2) '0)) + ((* * *) (##sys#substring-index #(1) #(2) #(3)))) + +(substring-index-ci (procedure! substring-index-ci (string string #!optional fixnum) *) + ((* *) (##sys#substring-index-ci #(1) #(2) '0)) + ((* * *) (##sys#substring-index-ci #(1) #(2) #(3)))) + (substring=? (procedure! substring=? (string string #!optional fixnum fixnum fixnum) boolean)) (tail? (procedure tail? (* *) boolean)) @@ -1065,8 +1053,7 @@ (irregex-match (procedure! irregex-match (* string) *)) ;irregex-match? -(irregex-match-data? (procedure irregex-match-data? (*) boolean)) -(#%predicate irregex-match-data? (struct regexp-match)) +(irregex-match-data? (procedure? (struct regexp-match) irregex-match-data? (*) boolean)) (irregex-match-end (procedure irregex-match-end (* #!optional *) *)) ;irregex-match-end-chunk @@ -1108,8 +1095,7 @@ (irregex-match-valid-index? (procedure! irregex-match-valid-index? ((struct regexp-match) *) boolean)) -(irregex? (procedure irregex? (*) boolean)) -(#%predicate irregex? (struct regexp)) +(irregex? (procedure? (struct regexp) irregex? (*) boolean)) (make-irregex-chunker (procedure! make-irregex-chunker @@ -1190,8 +1176,7 @@ (pointer-f64-set! (procedure! pointer-f64-set! (pointer number) undefined)) (pointer-vector (procedure! pointer-vector (#!rest pointer-vector) boolean)) -(pointer-vector? (procedure pointer-vector? (*) boolean)) -(#%predicate pointer-vector? pointer-vector) +(pointer-vector? (procedure? pointer-vector pointer-vector? (*) boolean)) (pointer-vector-fill! (procedure! pointer-vector-fill! (pointer-vector pointer) undefined)) @@ -1217,8 +1202,7 @@ (pointer=? (procedure! pointer=? (pointer pointer) boolean) ((pointer pointer) (##core#inline "C_pointer_eqp" #(1) #(2)))) -(pointer? (procedure pointer? (*) boolean)) -(#%predicate pointer? pointer) +(pointer? (procedure? pointer pointer? (*) boolean)) (procedure-data (procedure! procedure-data (procedure) *)) (record->vector (procedure record->vector (*) vector)) @@ -1781,8 +1765,7 @@ (char-set<= (procedure! char-set<= (#!rest (struct char-set)) boolean)) (char-set= (procedure! char-set= (#!rest (struct char-set)) boolean)) -(char-set? (procedure char-set? (*) boolean)) -(#%predicate char-set? (struct char-set)) +(char-set? (procedure? (struct char-set) char-set? (*) boolean)) (end-of-char-set? (procedure! end-of-char-set? (fixnum) boolean)) (list->char-set (procedure! list->char-set (list #!optional (struct char-set)) (struct char-set))) @@ -1801,8 +1784,8 @@ (condition-variable-specific (procedure! condition-variable-specific ((struct condition-variable)) *)) (condition-variable-specific-set! (procedure! condition-variable-specific-set! ((struct condition-variable) *) undefined)) -(condition-variable? (procedure! condition-variable? (*) boolean)) -(#%predicate condition-variable? (struct condition-variable)) +(condition-variable? (procedure? (struct condition-variable) condition-variable? (*) + boolean)) (current-thread (procedure current-thread () (struct thread))) ;XXX @@ -1826,8 +1809,7 @@ (mutex-state (procedure! mutex-state ((struct mutex)) symbol)) (mutex-unlock! (procedure! mutex-unlock! ((struct mutex) #!optional (struct condition-variable) *) undefined)) -(mutex? (procedure mutex? (*) boolean)) -(#%predicate mutex? (struct mutex)) +(mutex? (procedure? (struct mutex) mutex? (*) boolean)) (raise (procedure raise (*) noreturn)) (seconds->time (procedure! seconds->time (number) (struct time))) @@ -1861,14 +1843,12 @@ (thread-wait-for-i/o! (procedure! thread-wait-for-i/o! (fixnum #!optional symbol) undefined)) (thread-yield! (procedure thread-yield! () undefined)) -(thread? (procedure thread? (*) boolean)) -(#%predicate thread? (struct thread)) +(thread? (procedure? (struct thread) thread? (*) boolean)) (time->milliseconds deprecated) (time->seconds (procedure! time->seconds ((struct time)) number)) -(time? (procedure time? (*) boolean)) -(#%predicate time? (struct time)) +(time? (procedure? (struct time) time? (*) boolean)) (uncaught-exception-reason (procedure! uncaught-exception-reason ((struct condition)) *)) (uncaught-exception? (procedure uncaught-exception? (*) boolean)) @@ -1902,8 +1882,7 @@ (f32vector-ref (procedure! f32vector-ref ((struct f32vector) fixnum) float)) (f32vector-set! (procedure! f32vector-set! ((struct f32vector) fixnum number) undefined)) -(f32vector? (procedure f32vector? (*) boolean)) -(#%predicate f32vector? (struct f32vector)) +(f32vector? (procedure? (struct f32vector) f32vector? (*) boolean)) (f64vector (procedure! f64vector (#!rest number) (struct f64vector))) (f64vector->blob (procedure! f64vector->blob ((struct f32vector)) blob)) @@ -1916,8 +1895,7 @@ (f64vector-ref (procedure! f64vector-ref ((struct f64vector) fixnum) float)) (f64vector-set! (procedure! f64vector-set! ((struct f64vector) fixnum number) undefined)) -(f64vector? (procedure f64vector? (*) boolean)) -(#%predicate f64vector? (struct f64vector)) +(f64vector? (procedure? (struct f64vector) f64vector? (*) boolean)) (list->f32vector (procedure! list->f32vector (list) (struct f32vector))) (list->f64vector (procedure! list->f64vector (list) (struct f64vector))) @@ -1949,8 +1927,7 @@ (s16vector-ref (procedure! s16vector-ref ((struct s16vector) fixnum) fixnum)) (s16vector-set! (procedure! s16vector-set! ((struct s16vector) fixnum fixnum) undefined)) -(s16vector? (procedure s16vector? (*) boolean)) -(#%predicate s16vector? (struct s16vector)) +(s16vector? (procedure? (struct s16vector) s16vector? (*) boolean)) (s32vector (procedure! s32vector (#!rest number) (struct s32vector))) (s32vector->blob (procedure! s32vector->blob ((struct 32vector)) blob)) @@ -1963,8 +1940,7 @@ (s32vector-ref (procedure! s32vector-ref ((struct s32vector) fixnum) number)) (s32vector-set! (procedure! s32vector-set! ((struct s32vector) fixnum number) undefined)) -(s32vector? (procedure s32vector? (*) boolean)) -(#%predicate s32vector? (struct s32vector)) +(s32vector? (procedure? (struct s32vector) s32vector? (*) boolean)) (s8vector (procedure! s8vector (#!rest fixnum) (struct s8vector))) (s8vector->blob (procedure! s8vector->blob ((struct s8vector)) blob)) @@ -1977,8 +1953,7 @@ (s8vector-ref (procedure! s8vector-ref ((struct s8vector) fixnum) fixnum)) (s8vector-set! (procedure! s8vector-set! ((struct s8vector) fixnum fixnum) undefined)) -(s8vector? (procedure s8vector? (*) boolean)) -(#%predicate s8vector? (struct s8vector)) +(s8vector? (procedure? (struct s8vector) s8vector? (*) boolean)) (subf32vector (procedure! subf32vector ((struct f32vector) fixnum fixnum) (struct f32vector))) (subf64vector (procedure! subf64vector ((struct f64vector) fixnum fixnum) (struct f64vector))) @@ -1999,8 +1974,7 @@ (u16vector-ref (procedure! u16vector-ref ((struct u16vector) fixnum) fixnum)) (u16vector-set! (procedure! u16vector-set! ((struct u16vector) fixnum fixnum) undefined)) -(u16vector? (procedure u16vector? (*) boolean)) -(#%predicate u16vector? (struct u16vector)) +(u16vector? (procedure? (struct u16vector) u16vector? (*) boolean)) (u32vector (procedure! u32vector (#!rest number) (struct u32vector))) (u32vector->blob (procedure! u32vector->blob ((struct u32vector)) blob)) @@ -2013,8 +1987,7 @@ (u32vector-ref (procedure! u32vector-ref ((struct u32vector) fixnum) number)) (u32vector-set! (procedure! u32vector-set! ((struct u32vector) fixnum number) undefined)) -(u32vector? (procedure u32vector? (*) boolean)) -(#%predicate u32vector? (struct u32vector)) +(u32vector? (procedure? (struct u32vector) u32vector? (*) boolean)) (u8vector (procedure! u8vector (#!rest fixnum) (struct u8vector))) (u8vector->blob (procedure! u8vector->blob ((struct u8vector)) blob)) @@ -2027,8 +2000,7 @@ (u8vector-ref (procedure! u8vector-ref ((struct u8vector) fixnum) fixnum)) (u8vector-set! (procedure! u8vector-set! ((struct u8vector) fixnum fixnum) undefined)) -(u8vector? (procedure u8vector? (*) boolean)) -(#%predicate u8vector? (struct u8vector)) +(u8vector? (procedure? (struct u8vector) u8vector? (*) boolean)) (write-u8vector (procedure! write-u8vector ((struct u8vector) #!optional port fixnum fixnum) undefined)) @@ -2087,8 +2059,7 @@ (hash-table-weak-values (procedure! hash-table-weak-values ((struct hash-table)) boolean) (((struct hash-table)) (##sys#slot #(1) '8))) -(hash-table? (procedure hash-table? (*) boolean)) -(#%predicate hash-table? (struct hash-table)) +(hash-table? (procedure? (struct hash-table) hash-table? (*) boolean)) ;;XXX if we want to hardcode hash-default-bound here, we could rewrite the 1-arg case... ; (applies to all hash-functions) @@ -2120,8 +2091,7 @@ (tcp-listener-port (procedure! tcp-listener-port ((struct tcp-listener)) fixnum)) -(tcp-listener? (procedure tcp-listener? (*) boolean)) -(#%predicate tcp-listener? (struct tcp-listener)) +(tcp-listener? (procedure? (struct tcp-listener) tcp-listener? (*) boolean)) (tcp-port-numbers (procedure! tcp-port-numbers (port) fixnum fixnum)) (tcp-read-timeout (procedure! tcp-read-timeout (#!optional number) number))Trap