From babb964413c2dc0058b4bb36f9a903a9de74f755 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Wed, 19 Jun 2013 00:41:37 -0400 Subject: [PATCH] MATCH-71: map patterns don't exhibit as much test sharing as expected Was missing a `groupable?` implementation for map patterns, remove throw logic from `val-at*`, unneeded. --- src/main/clojure/clojure/core/match.clj | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/clojure/clojure/core/match.clj b/src/main/clojure/clojure/core/match.clj index a395380f..af67123f 100644 --- a/src/main/clojure/clojure/core/match.clj +++ b/src/main/clojure/clojure/core/match.clj @@ -101,10 +101,7 @@ (.valAt this k not-found))) (defn val-at* - ([m k] (let [val (val-at m k ::not-found)] - (if (= val ::not-found) - (throw backtrack) - val))) + ([m k] (val-at m k ::not-found)) ([m k not-found] (val-at m k not-found))) (defn val-at-expr [& args] @@ -1576,6 +1573,10 @@ col with the first column and compile the result" (defmethod groupable? [PredicatePattern PredicatePattern] [a b] (= (:gs a) (:gs b))) +(defmethod groupable? [MapPattern MapPattern] + [a b] + (= (-> a meta :only) (-> b meta :only))) + (defmethod groupable? [OrPattern OrPattern] [a b] (let [as (:ps a)