summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-11-06 08:14:52 -0500
committerRich Hickey <richhickey@gmail.com>2009-11-06 08:14:52 -0500
commitd885123f06e3c22f5b8e7eb6b421f047e359e279 (patch)
tree3f53895019dc6411f0ce7282ee4f9fefb7d13eb0 /src
parent2e7e41c9788b9cc02fe070d8e5319929d996ee32 (diff)
fix case with no or default-only clauses
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core.clj9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 7d323472..81626b49 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -4437,14 +4437,17 @@
(into m (zipmap test (repeat expr)))
(assoc m test expr)))
{} cases)
- [shift mask] (min-hash (keys case-map))
+ [shift mask] (if (seq case-map) (min-hash (keys case-map)) [0 0])
hmap (reduce (fn [m [test expr :as te]]
(assoc m (shift-mask shift mask (hash test)) te))
(sorted-map) case-map)]
`(let [~ge ~e]
- (case* ~ge ~shift ~mask ~(key (first hmap)) ~(key (last hmap)) ~default ~hmap
- ~(every? keyword? (keys case-map))))))
+ ~(condp = (count clauses)
+ 0 default
+ 1 default
+ :else `(case* ~ge ~shift ~mask ~(key (first hmap)) ~(key (last hmap)) ~default ~hmap
+ ~(every? keyword? (keys case-map)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; helper files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(alter-meta! (find-ns 'clojure.core) assoc :doc "Fundamental library of the Clojure language")