diff options
author | Chas Emerick <cemerick@snowtide.com> | 2010-01-12 15:54:26 -0500 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-14 17:05:09 -0400 |
commit | a99b3be7bab006037c7454ef87f3a5d6510703a6 (patch) | |
tree | 6132cf6bb3db137fb687bcc3cc4437ba039b2d5c | |
parent | 4f6fda54954fe7407967d65a5518906453312395 (diff) |
added bound? and thread-bound?
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/clj/clojure/core.clj | 12 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Var.java | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index a728bc0d..70acba9a 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -3819,6 +3819,18 @@ current value plus any args" [#^clojure.lang.Var v f & args] (.alterRoot v f args)) +(defn bound? + "Returns true if all of the vars provided as arguments have any bound value, root or thread-local. + Implies that deref'ing the provided vars will succeed. Returns true if no vars are provided." + [& vars] + (every? #(.isBound #^clojure.lang.Var %) vars)) + +(defn thread-bound? + "Returns true if all of the vars provided as arguments have thread-local bindings. + Implies that set!'ing the provided vars will succeed. Returns true if no vars are provided." + [& vars] + (every? #(.getThreadBinding #^clojure.lang.Var %) vars)) + (defn make-hierarchy "Creates a hierarchy object for use with derive, isa? etc." [] {:parents {} :descendants {} :ancestors {}}) diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java index 2a603b03..ca429749 100644 --- a/src/jvm/clojure/lang/Var.java +++ b/src/jvm/clojure/lang/Var.java @@ -328,7 +328,7 @@ public static Associative getThreadBindings(){ return ret; } -final Box getThreadBinding(){ +public final Box getThreadBinding(){ if(count.get() > 0) { IMapEntry e = dvals.get().bindings.entryAt(this); |