USING: destructors kernel tools.test continuations ; IN: temporary TUPLE: dummy-obj destroyed? ; TUPLE: dummy-destructor ; : ( obj ? -- newobj ) dummy-destructor construct-delegate ; M: dummy-destructor (destruct) ( obj -- ) destructor-obj t swap set-dummy-obj-destroyed? ; : \ dummy-obj construct-empty ; : destroy-always t push-destructor ; : destroy-later f push-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