]> gitweb.factorcode.org Git - factor.git/commitdiff
desctructors: add if-disposed
authorDoug Coleman <doug.coleman@gmail.com>
Mon, 3 Apr 2023 03:59:18 +0000 (22:59 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 14 Apr 2023 04:18:02 +0000 (23:18 -0500)
core/destructors/destructors.factor

index 1e2d7b0d79209ed464db73763c0d0e4665b4df10..f3fa786431d3ead9858775ed59d02adb6b1ee424 100644 (file)
@@ -37,10 +37,16 @@ ERROR: already-disposed disposable ;
 : check-disposed ( disposable -- disposable )
     dup disposed>> [ already-disposed ] when ; inline
 
-GENERIC: dispose ( disposable -- )
+: if-disposed ( ..a disposable quot1: ( ..a -- ..b ) quot2: ( ..a disposable -- ..b ) -- ..b )
+    [ dup disposed>> ] [ [ drop ] prepose ] [ ] tri* if ; inline
+
+: when-disposed ( ..a disposable quot1: ( ..a -- ..b ) quot2: ( ..a disposable -- ..b ) -- ..b )
+    [ ] if-disposed ; inline
 
-: unless-disposed ( disposable quot -- )
-    [ dup disposed>> [ drop ] ] dip if ; inline
+: unless-disposed ( ... disposable quot: ( ... disposable -- ... ) -- ... )
+    [ ] swap if-disposed ; inline
+
+GENERIC: dispose ( disposable -- )
 
 M: object dispose [ t >>disposed dispose* ] unless-disposed ;