|
68 | 68 | (with-name spec k)))))
|
69 | 69 | k))
|
70 | 70 |
|
| 71 | +(defn- reg-resolve! |
| 72 | + "returns the spec/regex at end of alias chain starting with k, throws if not found, k if k not ident" |
| 73 | + [k] |
| 74 | + (if (ident? k) |
| 75 | + (c/or (reg-resolve k) |
| 76 | + (throw (js/Error. (str "Unable to resolve spec: " k)))) |
| 77 | + k)) |
| 78 | + |
71 | 79 | (defn spec?
|
72 | 80 | "returns x if x is a spec object, else logical false"
|
73 | 81 | [x]
|
|
770 | 778 |
|
771 | 779 | (defn- noret? [p1 pret]
|
772 | 780 | (c/or (= pret ::nil)
|
773 |
| - (c/and (#{::rep ::pcat} (::op (reg-resolve p1))) ;;hrm, shouldn't know these |
| 781 | + (c/and (#{::rep ::pcat} (::op (reg-resolve! p1))) ;;hrm, shouldn't know these |
774 | 782 | (empty? pret))
|
775 | 783 | nil))
|
776 | 784 |
|
777 | 785 | (declare preturn)
|
778 | 786 |
|
779 | 787 | (defn- accept-nil? [p]
|
780 |
| - (let [{:keys [::op ps p1 p2 forms] :as p} (reg-resolve p)] |
| 788 | + (let [{:keys [::op ps p1 p2 forms] :as p} (reg-resolve! p)] |
781 | 789 | (case op
|
782 | 790 | ::accept true
|
783 | 791 | nil nil
|
|
792 | 800 | (declare add-ret)
|
793 | 801 |
|
794 | 802 | (defn- preturn [p]
|
795 |
| - (let [{[p0 & pr :as ps] :ps, [k :as ks] :ks, :keys [::op p1 ret forms] :as p} (reg-resolve p)] |
| 803 | + (let [{[p0 & pr :as ps] :ps, [k :as ks] :ks, :keys [::op p1 ret forms] :as p} (reg-resolve! p)] |
796 | 804 | (case op
|
797 | 805 | ::accept ret
|
798 | 806 | nil nil
|
|
808 | 816 |
|
809 | 817 | (defn- op-unform [p x]
|
810 | 818 | ;;(prn {:p p :x x})
|
811 |
| - (let [{[p0 & pr :as ps] :ps, [k :as ks] :ks, :keys [::op p1 ret forms rep+ maybe] :as p} (reg-resolve p) |
| 819 | + (let [{[p0 & pr :as ps] :ps, [k :as ks] :ks, :keys [::op p1 ret forms rep+ maybe] :as p} (reg-resolve! p) |
812 | 820 | kps (zipmap ks ps)]
|
813 | 821 | (case op
|
814 | 822 | ::accept [ret]
|
|
828 | 836 | (op-unform (kps k) v))))))
|
829 | 837 |
|
830 | 838 | (defn- add-ret [p r k]
|
831 |
| - (let [{:keys [::op ps splice] :as p} (reg-resolve p) |
| 839 | + (let [{:keys [::op ps splice] :as p} (reg-resolve! p) |
832 | 840 | prop #(let [ret (preturn p)]
|
833 | 841 | (if (empty? ret) r ((if splice into conj) r (if k {k ret} ret))))]
|
834 | 842 | (case op
|
|
842 | 850 |
|
843 | 851 | (defn- deriv
|
844 | 852 | [p x]
|
845 |
| - (let [{[p0 & pr :as ps] :ps, [k0 & kr :as ks] :ks, :keys [::op p1 p2 ret splice forms] :as p} (reg-resolve p)] |
| 853 | + (let [{[p0 & pr :as ps] :ps, [k0 & kr :as ks] :ks, :keys [::op p1 p2 ret splice forms] :as p} (reg-resolve! p)] |
846 | 854 | (when p
|
847 | 855 | (case op
|
848 | 856 | ::accept nil
|
|
861 | 869 | (when (accept-nil? p1) (deriv (rep* p2 p2 (add-ret p1 ret nil) splice forms) x)))))))
|
862 | 870 |
|
863 | 871 | (defn- op-describe [p]
|
864 |
| - (let [{:keys [::op ps ks forms splice p1 rep+ maybe] :as p} (reg-resolve p)] |
| 872 | + (let [{:keys [::op ps ks forms splice p1 rep+ maybe] :as p} (reg-resolve! p)] |
865 | 873 | ;;(prn {:op op :ks ks :forms forms :p p})
|
866 | 874 | (when p
|
867 | 875 | (case op
|
|
879 | 887 | (defn- op-explain [form p path via in input]
|
880 | 888 | ;;(prn {:form form :p p :path path :input input})
|
881 | 889 | (let [[x :as input] input
|
882 |
| - {:keys [::op ps ks forms splice p1 p2] :as p} (reg-resolve p) |
| 890 | + {:keys [::op ps ks forms splice p1 p2] :as p} (reg-resolve! p) |
883 | 891 | via (if-let [name (spec-name p)] (conj via name) via)
|
884 | 892 | insufficient (fn [path form]
|
885 | 893 | {path {:reason "Insufficient input"
|
|
932 | 940 |
|
933 | 941 | (defn- re-gen [p overrides path rmap f]
|
934 | 942 | ;;(prn {:op op :ks ks :forms forms})
|
935 |
| - (let [{:keys [::op ps ks p1 p2 forms splice ret id] :as p} (reg-resolve p) |
| 943 | + (let [{:keys [::op ps ks p1 p2 forms splice ret id] :as p} (reg-resolve! p) |
936 | 944 | rmap (if id (inck rmap id) rmap)
|
937 | 945 | ggens (fn [ps ks forms]
|
938 | 946 | (let [gen (fn [p k f]
|
|
0 commit comments