]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/central/central.factor
added DISPOSABLE-CENTRAL: to extra/central
[factor.git] / extra / central / central.factor
index df100f2e5bf34e4ce881be18514f93ac0b056d86..f7175141dda5e7c618d62a55e2b4aca7de37b04b 100644 (file)
@@ -1,16 +1,28 @@
-USING: kernel lexer namespaces parser sequences words ;
+USING: destructors kernel lexer namespaces parser sequences words ;
 
 IN: central
 
 : define-central-getter ( word -- )
     dup [ get ] curry (( -- obj )) define-declared ;
 
-: define-central-setter ( word with-word -- )
-    [ with-variable ] with (( object quot -- )) define-declared ;
+: define-centrals ( str -- getter setter )
+    [ create-in dup define-central-getter ]
+    [ "with-" prepend create-in dup make-inline ] bi ;
+
+: central-setter-def ( word with-word -- with-word quot )
+    [ with-variable ] with ;
+
+: disposable-setter-def ( word with-word -- with-word quot )
+    [ pick [ drop with-variable ] with-disposal ] with ;
+
+: declare-central ( with-word quot -- ) (( object quot -- )) define-declared ;
 
 : define-central ( word-name -- )
-    [ create-in dup define-central-getter ] keep
-    "with-" prepend create-in [ define-central-setter ] keep
-    make-inline ;
+    define-centrals central-setter-def declare-central ;
+
+: define-disposable-central ( word-name -- )
+    define-centrals disposable-setter-def declare-central ;
+
+SYNTAX: CENTRAL: ( -- ) scan define-central ;
 
-SYNTAX: CENTRAL: ( -- ) scan define-central ;
\ No newline at end of file
+SYNTAX: DISPOSABLE-CENTRAL: ( -- ) scan define-disposable-central ;
\ No newline at end of file