summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clj/clojure/core.clj12
-rw-r--r--test/clojure/test_clojure/data_structures.clj4
2 files changed, 11 insertions, 5 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 2746a610..81c1fcb7 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -1168,12 +1168,14 @@
{:added "1.0"}
([set] set)
([^clojure.lang.IPersistentSet set key]
- (. set (disjoin key)))
+ (when set
+ (. set (disjoin key))))
([set key & ks]
- (let [ret (disj set key)]
- (if ks
- (recur ret (first ks) (next ks))
- ret))))
+ (when set
+ (let [ret (disj set key)]
+ (if ks
+ (recur ret (first ks) (next ks))
+ ret)))))
(defn find
"Returns the map entry for key, or nil if key not present."
diff --git a/test/clojure/test_clojure/data_structures.clj b/test/clojure/test_clojure/data_structures.clj
index 690bde4e..ee4fd41a 100644
--- a/test/clojure/test_clojure/data_structures.clj
+++ b/test/clojure/test_clojure/data_structures.clj
@@ -728,6 +728,7 @@
; identity
(are [x] (= (disj x) x)
+ nil
#{}
#{1 2 3}
; different data types
@@ -753,6 +754,9 @@
(sorted-set 1 2) )
(are [x y] (= x y)
+ (disj nil :a) nil
+ (disj nil :a :b) nil
+
(disj #{} :a) #{}
(disj #{} :a :b) #{}