destructors: already-unregistered error had the wrong content, also don't throw an error when disposing a disposable twice

db4
Slava Pestov 2009-08-24 20:27:22 -05:00
parent 623ddfca6f
commit adc154e06b
3 changed files with 23 additions and 4 deletions

View File

@ -1,5 +1,5 @@
USING: destructors kernel tools.test continuations accessors
namespaces sequences ;
namespaces sequences destructors.private ;
IN: destructors.tests
TUPLE: dispose-error ;
@ -66,3 +66,12 @@ M: dummy-destructor dispose ( obj -- )
] ignore-errors destroyed?>>
] unit-test
TUPLE: silly-disposable < disposable ;
M: silly-disposable dispose* drop ;
silly-disposable new-disposable "s" set
"s" get dispose
[ "s" get unregister-disposable ]
[ disposable>> silly-disposable? ]
must-fail-with

View File

@ -21,7 +21,7 @@ SLOT: continuation
disposables get conjoin ;
: unregister-disposable ( obj -- )
disposables get 2dup key? [ already-unregistered ] unless delete-at ;
disposables get 2dup key? [ delete-at ] [ drop already-unregistered ] if ;
PRIVATE>
@ -49,7 +49,11 @@ M: object dispose
dup disposed>> [ drop ] [ t >>disposed dispose* ] if ;
M: disposable dispose
[ unregister-disposable ] [ call-next-method ] bi ;
dup disposed>> [ drop ] [
[ unregister-disposable ]
[ call-next-method ]
bi
] if ;
: dispose-each ( seq -- )
[

View File

@ -152,4 +152,10 @@ USE: debugger.threads
"non-byte-array-error" unique-file binary [
"" write
] with-file-writer
] [ no-method? ] must-fail-with
] [ no-method? ] must-fail-with
! What happens if we close a file twice?
[ ] [
"closing-twice" unique-file ascii <file-writer>
[ dispose ] [ dispose ] bi
] unit-test