aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscgilardi <scgilardi@gmail.com>2008-04-07 20:12:02 +0000
committerscgilardi <scgilardi@gmail.com>2008-04-07 20:12:02 +0000
commit71cebc07111b98797924c0da56077e20e88f819f (patch)
treed960c563bd616a17de26b17f66d34c9b4ef71255
parenta9cc1cb7c9acbacc58d55893b10d5a588f3ab191 (diff)
jewel.clj: protect private vars from redefinition on a :reload-all that incudes jewel
-rw-r--r--jewel.clj15
1 files changed, 13 insertions, 2 deletions
diff --git a/jewel.clj b/jewel.clj
index 7be977c9..3db2cfd2 100644
--- a/jewel.clj
+++ b/jewel.clj
@@ -53,12 +53,23 @@
(def
#^{:private true :doc
"A ref to a set of symbols representing loaded jewels"}
- *jewels* (ref #{}))
+ *jewels*)
(def
#^{:private true :doc
"True while a verbose require is pending"}
- *verbose* false)
+ *verbose*)
+
+(defmacro init-once
+ "Initializes a var exactly once. The var must already exist."
+ #^{:private true}
+ [var init]
+ `(let [v# (resolve '~var)]
+ (when-not (. v# (isBound))
+ (. v# (bindRoot ~init)))))
+
+(init-once *jewels* (ref #{}))
+(init-once *verbose* false)
(defn- load-system-resource
"Loads Clojure source from a resource within classpath"