File tree Expand file tree Collapse file tree 2 files changed +35
-12
lines changed
src/main/cljs/cljs/spec/impl Expand file tree Collapse file tree 2 files changed +35
-12
lines changed Original file line number Diff line number Diff line change 88
99(ns cljs.spec.impl.gen
1010 (:refer-clojure :exclude [delay])
11- (:require [cljs.core :as c]))
11+ (:require [cljs.core :as c]
12+ [clojure.string :as string]))
1213
1314(defmacro dynaload [[quote s]]
14- `(if (c/exists? ~s)
15- ~(vary-meta s assoc :cljs.analyzer/no-resolve true )
16- (fn [& ~'args]
17- (throw (js/Error. (str " Var " '~s " is not on the classpath" ))))))
15+ (let [xs (string/split (namespace s) #"\. " )
16+ cnt (count xs)
17+ checks (map
18+ (fn [n xs]
19+ `(c/exists? ~(symbol (string/join " ." (take n xs)))))
20+ (range 2 cnt)
21+ (repeat xs))]
22+ `(cljs.spec.impl.gen/LazyVar.
23+ (fn []
24+ (if (and ~@checks (c/exists? ~s))
25+ ~(vary-meta s assoc :cljs.analyzer/no-resolve true )
26+ (throw
27+ (js/Error.
28+ (str " Var " '~s " does not exist, "
29+ (namespace '~s) " never required" )))))
30+ nil )))
1831
1932(defmacro delay
2033 " given body that returns a generator, returns a
2841 [s]
2942 (let [fqn (symbol " clojure.test.check.generators" (name s))
3043 doc (str " Lazy loaded version of " fqn)]
31- `(let [g# (c/delay ( dynaload '~fqn) )]
44+ `(let [g# (dynaload '~fqn)]
3245 (defn ~s
3346 ~doc
3447 [& ~'args]
4760 [s]
4861 (let [fqn (symbol " clojure.test.check.generators" (name s))
4962 doc (str " Fn returning " fqn)]
50- `(let [g# (c/delay ( dynaload '~fqn) )]
63+ `(let [g# (dynaload '~fqn)]
5164 (defn ~s
5265 ~doc
5366 [& ~'args]
Original file line number Diff line number Diff line change 1313 [cljs.spec.impl.gen :as gen :refer [dynaload lazy-combinators lazy-prims]])
1414 (:require [cljs.core :as c]))
1515
16+ (deftype LazyVar [f ^:mutable cached]
17+ IDeref
18+ (-deref [this]
19+ (if-not (nil? cached)
20+ cached
21+ (let [x (f )]
22+ (when-not (nil? x)
23+ (set! cached x))
24+ x))))
25+
1626(def ^:private quick-check-ref
17- (c/delay ( dynaload 'clojure.test.check/quick-check) ))
27+ (dynaload 'clojure.test.check/quick-check))
1828
1929(defn quick-check
2030 [& args]
2131 (apply @quick-check-ref args))
2232
2333(def ^:private for-all*-ref
24- (c/delay ( dynaload 'clojure.test.check.properties/for-all*) ))
34+ (dynaload 'clojure.test.check.properties/for-all*))
2535
2636(defn for-all*
2737 " Dynamically loaded clojure.test.check.properties/for-all*."
2838 [& args]
2939 (apply @for-all*-ref args))
3040
31- (let [g? (c/delay ( dynaload 'clojure.test.check.generators/generator?) )
32- g (c/delay ( dynaload 'clojure.test.check.generators/generate) )
33- mkg (c/delay ( dynaload 'clojure.test.check.generators/->Generator) )]
41+ (let [g? (dynaload 'clojure.test.check.generators/generator?)
42+ g (dynaload 'clojure.test.check.generators/generate)
43+ mkg (dynaload 'clojure.test.check.generators/->Generator)]
3444 (defn- generator?
3545 [x]
3646 (@g? x))
You can’t perform that action at this time.
0 commit comments