! Copyright (C) 2014 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: assocs continuations fry hashtables kernel math sequences sequences.private variables vectors ; IN: dynamic-variables TYPED-GLOBAL: new-namestack hashtable ! new-namestack [ H{ } clone ] initialize ! [ pop* drop ] ! [ drop new-namestack delete-at ] if ; : pop-vars ( assoc -- ) [ drop pop-var ] assoc-each ; PRIVATE> : get-var ( name -- value ) get-var-vector last ; : set-var ( value name -- ) get-var-vector set-last ; : with-vars ( assoc quot -- ) over dup '[ [ _ push-vars @ _ pop-vars ] [ _ pop-vars rethrow ] recover ] call ; inline ! : with-var ( value key quot -- ) ! over dup '[ [ _ _ push-var @ _ pop-var ] [ _ pop-var rethrow ] recover ] call ; inline : with-var ( value key quot -- ) over '[ _ _ push-var @ _ pop-var ] call ; inline