Skip to content

Commit 2d20b33

Browse files
author
dnolen
committed
same as Clojure 43e1c7f3b
1 parent 733ff82 commit 2d20b33

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/main/cljs/cljs/spec.cljs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@
6868
(with-name spec k)))))
6969
k))
7070

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+
7179
(defn spec?
7280
"returns x if x is a spec object, else logical false"
7381
[x]
@@ -770,14 +778,14 @@
770778

771779
(defn- noret? [p1 pret]
772780
(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
774782
(empty? pret))
775783
nil))
776784

777785
(declare preturn)
778786

779787
(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)]
781789
(case op
782790
::accept true
783791
nil nil
@@ -792,7 +800,7 @@
792800
(declare add-ret)
793801

794802
(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)]
796804
(case op
797805
::accept ret
798806
nil nil
@@ -808,7 +816,7 @@
808816

809817
(defn- op-unform [p x]
810818
;;(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)
812820
kps (zipmap ks ps)]
813821
(case op
814822
::accept [ret]
@@ -828,7 +836,7 @@
828836
(op-unform (kps k) v))))))
829837

830838
(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)
832840
prop #(let [ret (preturn p)]
833841
(if (empty? ret) r ((if splice into conj) r (if k {k ret} ret))))]
834842
(case op
@@ -842,7 +850,7 @@
842850

843851
(defn- deriv
844852
[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)]
846854
(when p
847855
(case op
848856
::accept nil
@@ -861,7 +869,7 @@
861869
(when (accept-nil? p1) (deriv (rep* p2 p2 (add-ret p1 ret nil) splice forms) x)))))))
862870

863871
(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)]
865873
;;(prn {:op op :ks ks :forms forms :p p})
866874
(when p
867875
(case op
@@ -879,7 +887,7 @@
879887
(defn- op-explain [form p path via in input]
880888
;;(prn {:form form :p p :path path :input input})
881889
(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)
883891
via (if-let [name (spec-name p)] (conj via name) via)
884892
insufficient (fn [path form]
885893
{path {:reason "Insufficient input"
@@ -932,7 +940,7 @@
932940

933941
(defn- re-gen [p overrides path rmap f]
934942
;;(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)
936944
rmap (if id (inck rmap id) rmap)
937945
ggens (fn [ps ks forms]
938946
(let [gen (fn [p k f]

0 commit comments

Comments
 (0)