summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChas Emerick <cemerick@snowtide.com>2010-01-12 15:54:26 -0500
committerStuart Halloway <stu@thinkrelevance.com>2010-04-14 17:05:09 -0400
commita99b3be7bab006037c7454ef87f3a5d6510703a6 (patch)
tree6132cf6bb3db137fb687bcc3cc4437ba039b2d5c
parent4f6fda54954fe7407967d65a5518906453312395 (diff)
added bound? and thread-bound?
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/core.clj12
-rw-r--r--src/jvm/clojure/lang/Var.java2
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);