|
806 | 806 | (defn- op-explain [form p path via in input]
|
807 | 807 | ;;(prn {:form form :p p :path path :input input})
|
808 | 808 | (let [[x :as input] input
|
809 |
| - via (if-let [name (spec-name p)] (conj via name) via) |
810 | 809 | {: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) |
811 | 811 | insufficient (fn [path form]
|
812 | 812 | {path {:reason "Insufficient input"
|
813 | 813 | :pred (abbrev form)
|
|
827 | 827 | (if-let [p1 (deriv p1 x)]
|
828 | 828 | (explain-pred-list forms ps path via in (preturn p1))
|
829 | 829 | (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))) |
837 | 837 | path (if k (conj path k) path)
|
838 | 838 | form (c/or form (op-describe pred))]
|
839 | 839 | (if (c/and (empty? input) (not pred))
|
|
916 | 916 | (if-let [dp (deriv p x)]
|
917 | 917 | (recur dp xs (inc i))
|
918 | 918 | (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)}}) |
924 | 926 | (c/or (op-explain (op-describe p) p path via (conj in i) (seq data))
|
925 | 927 | {path {:reason "Extra input"
|
926 | 928 | :pred (abbrev (op-describe p))
|
|
0 commit comments