diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-11-06 08:14:52 -0500 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-11-06 08:14:52 -0500 |
commit | d885123f06e3c22f5b8e7eb6b421f047e359e279 (patch) | |
tree | 3f53895019dc6411f0ce7282ee4f9fefb7d13eb0 /src | |
parent | 2e7e41c9788b9cc02fe070d8e5319929d996ee32 (diff) |
fix case with no or default-only clauses
Diffstat (limited to 'src')
-rw-r--r-- | src/clj/clojure/core.clj | 9 |
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") |