]> gitweb.factorcode.org Git - factor.git/blobdiff - core/kernel/kernel.factor
kernel: add transmute and some use cases
[factor.git] / core / kernel / kernel.factor
index c9b19c3cfbff142dfb85e838d725671ce0dd4610..29579b977aa62e9f8a83f5df68430ed8fa9d6340 100644 (file)
@@ -173,19 +173,22 @@ DEFER: if
 
 : ?call ( ..a obj/f quot: ( ..a obj -- ..a obj' )  -- ..a obj'/f ) dupd when ; inline
 
-: transmute ( old quot: ( old -- new/f ) -- new/old new? )
+: ?transmute ( old quot: ( old -- new/f ) -- new/old new? )
     keep over [ drop t ] [ nip f ] if ; inline
 
+: transmute ( old quot: ( old -- new/f ) -- new/old )
+    ?transmute drop ; inline
+
 ! Default
 
 : ?when ( ..a default cond: ( ..a default -- ..a new/f ) true: ( ..a new -- ..b ) -- ..b )
-    [ transmute ] dip when ; inline
+    [ ?transmute ] dip when ; inline
 
 : ?unless ( ..a default cond: ( ..a default -- ..a new/f ) false: ( ..a default -- ..b ) -- ..b )
-    [ transmute ] dip unless ; inline
+    [ ?transmute ] dip unless ; inline
 
 : ?if ( ..a default cond: ( default -- new/f ) true: ( ..a new -- ..b ) false: ( ..a default -- ..b ) -- ..b )
-    [ transmute ] 2dip if ; inline
+    [ ?transmute ] 2dip if ; inline
 
 ! Cleavers
 : bi ( x p q -- )