Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

34 lines (28 sloc) 1.18 KB
;; Copyright (c) Nicola Mometto, Rich Hickey & contributors.
;; The use and distribution terms for this software are covered by the
;; Eclipse Public License 1.0 (
;; which can be found in the file epl-v10.html at the root of this distribution.
;; By using this software in any fashion, you are agreeing to be bound by
;; the terms of this license.
;; You must not remove this notice, or any other, from this software.
(:require [ :refer [prewalk]]))
(def ^:dynamic ^:private *bindings*)
(defn ^:private -add-binding-atom
(case (:op ast)
(let [a (atom {})]
(swap! *bindings* assoc (:name ast) a)
(assoc ast :atom a))
(assoc ast :atom (or (@*bindings* (:name ast))
(atom {})))
(defn add-binding-atom
"Walks the AST and adds an atom-backed-map to every local binding,
the same atom will be shared between all occurences of that local.
The atom is put in the :atom field of the node."
(binding [*bindings* (atom {})]
(prewalk ast -add-binding-atom)))
Jump to Line
Something went wrong with that request. Please try again.