Skip to content

Commit c0b1142

Browse files
committed
same as Clojure commit 68fe71f
1 parent 1951052 commit c0b1142

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/main/cljs/cljs/spec.cljs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -806,8 +806,8 @@
806806
(defn- op-explain [form p path via in input]
807807
;;(prn {:form form :p p :path path :input input})
808808
(let [[x :as input] input
809-
via (if-let [name (spec-name p)] (conj via name) via)
810809
{:keys [::op ps ks forms splice p1 p2] :as p} (reg-resolve p)
810+
via (if-let [name (spec-name p)] (conj via name) via)
811811
insufficient (fn [path form]
812812
{path {:reason "Insufficient input"
813813
:pred (abbrev form)
@@ -827,13 +827,13 @@
827827
(if-let [p1 (deriv p1 x)]
828828
(explain-pred-list forms ps path via in (preturn p1))
829829
(op-explain (op-describe p1) p1 path via in input)))
830-
::pcat (let [[pred k form] (->> (map vector
831-
ps
832-
(c/or (seq ks) (repeat nil))
833-
(c/or (seq forms) (repeat nil)))
834-
(remove (fn [[p]]
835-
(accept-nil? p)))
836-
first)
830+
::pcat (let [pkfs (map vector
831+
ps
832+
(c/or (seq ks) (repeat nil))
833+
(c/or (seq forms) (repeat nil)))
834+
[pred k form] (if (= 1 (count pkfs))
835+
(first pkfs)
836+
(first (remove (fn [[p]] (accept-nil? p)) pkfs)))
837837
path (if k (conj path k) path)
838838
form (c/or form (op-describe pred))]
839839
(if (c/and (empty? input) (not pred))
@@ -916,11 +916,13 @@
916916
(if-let [dp (deriv p x)]
917917
(recur dp xs (inc i))
918918
(if (accept? p)
919-
{path {:reason "Extra input"
920-
:pred (abbrev (op-describe re))
921-
:val data
922-
:via via
923-
:in (conj in i)}}
919+
(if (= (::op p) ::pcat)
920+
(op-explain (op-describe p) p path via (conj in i) (seq data))
921+
{path {:reason "Extra input"
922+
:pred (abbrev (op-describe re))
923+
:val data
924+
:via via
925+
:in (conj in i)}})
924926
(c/or (op-explain (op-describe p) p path via (conj in i) (seq data))
925927
{path {:reason "Extra input"
926928
:pred (abbrev (op-describe p))

0 commit comments

Comments
 (0)