|
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