USING: destructors kernel tools.test continuations ; IN: temporary TUPLE: dummy-obj destroyed? ; : dummy-obj construct-empty ; TUPLE: dummy-destructor obj ; C: dummy-destructor M: dummy-destructor destruct ( obj -- ) dummy-destructor-obj t swap set-dummy-obj-destroyed? ; : destroy-always add-always-destructor ; : destroy-later add-error-destructor ; [ t ] [ [ dup destroy-always ] with-destructors dummy-obj-destroyed? ] unit-test [ f ] [ [ dup destroy-later ] with-destructors dummy-obj-destroyed? ] unit-test [ t ] [ [ [ dup destroy-always "foo" throw ] with-destructors ] catch drop dummy-obj-destroyed? ] unit-test [ t ] [ [ [ dup destroy-later "foo" throw ] with-destructors ] catch drop dummy-obj-destroyed? ] unit-test