diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-05-19 15:31:06 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-05-19 15:31:06 +0000 |
commit | 2b2c841a1175df381669c4107c5a545adf8a9f11 (patch) | |
tree | ad3b69ad2b8dedd3ccbf76c8baaaf3b96b2c4fb9 /src | |
parent | af26812e74ee097197b4c4544bdda56f57081723 (diff) |
fixed destructuring of nil map, added get support for sets
Diffstat (limited to 'src')
-rw-r--r-- | src/boot.clj | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/boot.clj b/src/boot.clj index 10e0ce84..63103355 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -1909,7 +1909,7 @@ not-every? (comp not every?)) (fn [bvec b v] (let [gmap (or (:as b) (gensym "map__")) defaults (:or b)] - (loop [ret (-> bvec (conj gmap) (conj (list `or v {}))) + (loop [ret (-> bvec (conj gmap) (conj v)) bes (reduce (fn [bes entry] (reduce #(assoc %1 %2 ((val entry) %2)) @@ -1923,7 +1923,7 @@ not-every? (comp not every?)) has-default (contains? defaults bb)] (recur (pb ret bb (if has-default (list `get gmap bk (defaults bb)) - (list gmap bk))) + (list `get gmap bk))) (rest bes))) ret))))] (cond diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index e2723391..5127a9cd 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -465,6 +465,12 @@ static public Object get(Object coll, Object key){ Map m = (Map) coll; return m.get(key); } + else if(coll instanceof IPersistentSet) + { + IPersistentSet set = (IPersistentSet) coll; + if(set.contains(key)) + return key; + } else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray())) { int n = ((Number) key).intValue(); @@ -489,6 +495,13 @@ static public Object get(Object coll, Object key, Object notFound){ return m.get(key); return notFound; } + else if(coll instanceof IPersistentSet) + { + IPersistentSet set = (IPersistentSet) coll; + if(set.contains(key)) + return key; + return notFound; + } else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray())) { int n = ((Number) key).intValue(); |