From 57ccaed8deab5ebc199f0436ac3d0b2a2d57d55e Mon Sep 17 00:00:00 2001 From: Steve Miner Date: Mon, 12 Dec 2011 10:47:44 -0500 Subject: [PATCH] improved regroup-keywords --- src/main/clojure/clojure/core/match.clj | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/clojure/clojure/core/match.clj b/src/main/clojure/clojure/core/match.clj index 1b11b2e..64d9a45 100644 --- a/src/main/clojure/clojure/core/match.clj +++ b/src/main/clojure/clojure/core/match.clj @@ -1410,19 +1410,18 @@ (keys (.getMethodTable ^clojure.lang.MultiFn emit-pattern-for-syntax)))))))) -(defn- pattern-keyword? [kw] - (#{:when :as} kw)) - -(let [void (gensym)] +(let [void (Object.) + void? #(identical? void %) + infix-keyword? #(#{:when :as} %)] ;; void is a unique placeholder for nothing -- we can't use nil ;; because that's a legal symbol in a pattern row (defn- regroup-keywords [pattern] (cond (vector? pattern) (first (reduce (fn [[result p q] r] (cond - (= void p) [result q r] - (and (not= void r) (pattern-keyword? q)) - [(conj result (list (regroup-keywords p) q r)) void void] + (void? p) [result q r] + (and (not (void? r)) (infix-keyword? q)) + [(conj result (list (regroup-keywords p) q r)) void void] :else [(conj result (regroup-keywords p)) q r])) [[] void void] (conj pattern void void))) -- 1.7.4.1