added textual-output-port checks for record-writer write argument print.ss, record.ms, root-experr*
This commit is contained in:
parent
14a685af77
commit
416a6790c3
|
@ -2129,3 +2129,9 @@
|
|||
- proper unicode handling when retrieving error messages from the OS
|
||||
on Windows
|
||||
windows.c
|
||||
- repair collector handling of an ephemerons that refers to a
|
||||
younger object during incremental promotion
|
||||
gc.c, 4.ms
|
||||
- added textual-output-port checks for record-writer write argument
|
||||
print.ss,
|
||||
record.ms, root-experr*
|
||||
|
|
|
@ -2840,6 +2840,39 @@
|
|||
)
|
||||
|
||||
(mat record-writer
|
||||
(equal?
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(define-record-type sp (fields lat))
|
||||
(record-writer (type-descriptor sp)
|
||||
(lambda (x p w) (w (sp-lat x) p)))
|
||||
(pretty-print (list (make-sp 'ugh)))))
|
||||
"(ugh)\n")
|
||||
(error? ; 'sp is not an rtd
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(define-record-type sp (fields lat))
|
||||
(record-writer 'sp
|
||||
(lambda (x p w) (w (sp-lat x) p))))))
|
||||
(error? ; "oops" is not a procedure
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(define-record-type sp (fields lat))
|
||||
(record-writer (type-descriptor sp) "oops"))))
|
||||
(error? ; ugh is not a textual output port
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(define-record-type sp (fields lat))
|
||||
(record-writer (type-descriptor sp)
|
||||
(lambda (x p w) (w p (sp-lat x))))
|
||||
(pretty-print (list (make-sp 'ugh))))))
|
||||
(error? ; procedure not a textual output port
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(define-record-type sp (fields lat))
|
||||
(record-writer (type-descriptor sp)
|
||||
(lambda (x p w) (w (sp-lat x) w)))
|
||||
(pretty-print (list (make-sp 'ugh))))))
|
||||
(begin
|
||||
(define-record $froz (a b) ([c (+ a b)]))
|
||||
(define-record $fruz $froz (d))
|
||||
|
|
|
@ -7819,6 +7819,10 @@ record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 fo
|
|||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type single-float".
|
||||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type double".
|
||||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type double-float".
|
||||
record.mo:Expected error in mat record-writer: "record-writer: sp is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-writer: "record-writer: "oops" is not a procedure".
|
||||
record.mo:Expected error in mat record-writer: "write: ugh is not a textual output port".
|
||||
record.mo:Expected error in mat record-writer: "write: #<procedure> is not a textual output port".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a procedure or #f".
|
||||
|
|
|
@ -7379,6 +7379,10 @@ record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 fo
|
|||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type single-float".
|
||||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type double".
|
||||
record.mo:Expected error in mat foreign-data: "foreign-set!: invalid value 17 for foreign type double-float".
|
||||
record.mo:Expected error in mat record-writer: "record-writer: sp is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-writer: "record-writer: "oops" is not a procedure".
|
||||
record.mo:Expected error in mat record-writer: "write: ugh is not a textual output port".
|
||||
record.mo:Expected error in mat record-writer: "write: #<procedure> is not a textual output port".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a record-type descriptor".
|
||||
record.mo:Expected error in mat record-equal/hash: "record-type-equal-procedure: 7 is not a procedure or #f".
|
||||
|
|
|
@ -173,7 +173,9 @@
|
|||
[(and ($record? x) (not (eq? x #!base-rtd)))
|
||||
(when (print-record)
|
||||
((record-writer ($record-type-descriptor x)) x (bit-sink)
|
||||
(lambda (x p) ; could check for p == (bit-sink)
|
||||
(lambda (x p)
|
||||
(unless (and (output-port? p) (textual-port? p))
|
||||
($oops 'write "~s is not a textual output port" p))
|
||||
(find-dupls x (decr lev) len))))]
|
||||
[(box? x) (find-dupls (unbox x) (decr lev) len)]
|
||||
[(eq? x black-hole) (find-dupls x (decr lev) len)])]
|
||||
|
@ -215,7 +217,9 @@
|
|||
(call/cc
|
||||
(lambda (k)
|
||||
((record-writer ($record-type-descriptor x)) x (bit-sink)
|
||||
(lambda (x p) ; could check for p == (bit-sink)
|
||||
(lambda (x p)
|
||||
(unless (and (output-port? p) (textual-port? p))
|
||||
($oops 'write "~s is not a textual output port" p))
|
||||
(if (cyclic? x (fx+ curlev 1) 0)
|
||||
(k #t))))
|
||||
#f)))))]
|
||||
|
@ -308,7 +312,9 @@
|
|||
(call/cc
|
||||
(lambda (k)
|
||||
((record-writer ($record-type-descriptor x)) x (bit-sink)
|
||||
(lambda (x p) ; could check for p == (bit-sink)
|
||||
(lambda (x p)
|
||||
(unless (and (output-port? p) (textual-port? p))
|
||||
($oops 'write "~s is not a textual output port" p))
|
||||
(if (down x (fx- xlev 1)) (k #t))))
|
||||
#f)))]
|
||||
[(box? x) (down (unbox x) (fx- xlev 1))]
|
||||
|
@ -706,7 +712,9 @@ floating point returns with (1 0 -1 ...).
|
|||
(if (limit? lev)
|
||||
(display-string "#[...]" p)
|
||||
((record-writer ($record-type-descriptor x)) x p
|
||||
(lambda (x p) ; could check for p == old p
|
||||
(lambda (x p)
|
||||
(unless (and (output-port? p) (textual-port? p))
|
||||
($oops 'write "~s is not a textual output port" p))
|
||||
(wr x r (decr lev) len d? env p))))
|
||||
(let ([rtd ($record-type-descriptor x)])
|
||||
(cond ; keep in sync with default-record-writer
|
||||
|
|
Loading…
Reference in New Issue
Block a user