Skip to content

Commit a6885a0

Browse files
committed
CLJS-2847: s/coll-of and s/every gen is very slow if :kind specified without :into
1 parent 4d408e1 commit a6885a0

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/main/cljs/cljs/spec/alpha.cljs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -825,17 +825,19 @@
825825
(with-gen* [_ gfn] (merge-spec-impl forms preds gfn))
826826
(describe* [_] `(merge ~@forms))))
827827

828+
(def ^:private empty-coll {`vector? [], `set? #{}, `list? (), `map? {}})
829+
828830
(defn ^:skip-wiki every-impl
829831
"Do not call this directly, use 'every', 'every-kv', 'coll-of' or 'map-of'"
830832
([form pred opts] (every-impl form pred opts nil))
831-
([form pred {gen-into :into
833+
([form pred {conform-into :into
832834
describe-form ::describe
833835
:keys [kind ::kind-form count max-count min-count distinct gen-max ::kfn ::cpred
834836
conform-keys ::conform-all]
835837
:or {gen-max 20}
836838
:as opts}
837839
gfn]
838-
(let [conform-into gen-into
840+
(let [gen-into (if conform-into (empty conform-into) (get empty-coll kind-form))
839841
spec (delay (specize pred))
840842
check? #(valid? @spec %)
841843
kfn (c/or kfn (fn [i v] i))
@@ -926,7 +928,7 @@
926928
(let [pgen (gensub pred overrides path rmap form)]
927929
(gen/bind
928930
(cond
929-
gen-into (gen/return (empty gen-into))
931+
gen-into (gen/return gen-into)
930932
kind (gen/fmap #(if (empty? %) % (empty %))
931933
(gensub kind overrides path rmap form))
932934
:else (gen/return []))

0 commit comments

Comments
 (0)