inline caching working for cljs, all tests passing

This commit is contained in:
Nathan Marz 2016-09-03 19:58:10 -04:00
parent d7d1d264ef
commit 18791c6b82
4 changed files with 24 additions and 15 deletions

View file

@ -24,7 +24,7 @@
:profiles {:dev {:dependencies :profiles {:dev {:dependencies
[[org.clojure/test.check "0.7.0"] [[org.clojure/test.check "0.7.0"]
[org.clojure/clojure "1.7.0"] [org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.10"]]} [org.clojure/clojurescript "1.7.122"]]}
:test {:dependencies [[org.clojure/clojure "1.7.0"]]}} :test {:dependencies [[org.clojure/clojure "1.7.0"]]}}

View file

@ -180,6 +180,12 @@
(coerce-path [this] (coerce-path [this]
(coerce-object this))) (coerce-object this)))
(def STAY*
(reify RichNavigator
(select* [this vals structure next-fn]
(next-fn vals structure))
(transform* [this vals structure next-fn]
(next-fn vals structure))))
(defn combine-two-navs [nav1 nav2] (defn combine-two-navs [nav1 nav2]
(reify RichNavigator (reify RichNavigator
@ -203,7 +209,7 @@
(do-comp-paths [navigators] (do-comp-paths [navigators]
(let [coerced (map coerce-path navigators)] (let [coerced (map coerce-path navigators)]
(cond (empty? coerced) (cond (empty? coerced)
(coerce-path nil) STAY*
(= 1 (count coerced)) (= 1 (count coerced))
(first coerced) (first coerced)
@ -443,13 +449,6 @@
(next-fn vals structure) (next-fn vals structure)
structure)))) structure))))
(def STAY*
(reify RichNavigator
(select* [this vals structure next-fn]
(next-fn vals structure))
(transform* [this vals structure next-fn]
(next-fn vals structure))))
(defn ^:direct-nav collected?* [afn] (defn ^:direct-nav collected?* [afn]
(reify RichNavigator (reify RichNavigator
(select* [this vals structure next-fn] (select* [this vals structure next-fn]
@ -794,6 +793,12 @@
(def ^:dynamic *DEBUG-INLINE-CACHING* false) (def ^:dynamic *DEBUG-INLINE-CACHING* false)
#?(:cljs
(defn mk-fn-name-strs [o]
(walk/postwalk
(fn [e]
(if (fn? e) (re-find #" .*" (pr-str e)) e))
o)))
#?(:clj #?(:clj
(defn mk-dynamic-path-maker [resolved-code ns-str used-locals-list possible-param] (defn mk-dynamic-path-maker [resolved-code ns-str used-locals-list possible-param]
@ -806,10 +811,12 @@
(binding [*ns* ns] (eval+ code)))) (binding [*ns* ns] (eval+ code))))
:cljs :cljs
(defn mk-dynamic-path-maker [resolved-code ns-str used-locals-list possible-param] (defn mk-dynamic-path-maker [resolved-code ns-str used-locals-list possible-params]
(when *DEBUG-INLINE-CACHING* (when *DEBUG-INLINE-CACHING*
(println "Produced dynamic object:") (println "Possible params:")
(println resolved-code) (println possible-params)
(println "\nProduced dynamic object:")
(pp/pprint (mk-fn-name-strs resolved-code))
(println)) (println))
(fn [dynamic-params] (fn [dynamic-params]
(late-resolve resolved-code dynamic-params)))) (late-resolve resolved-code dynamic-params))))

View file

@ -176,9 +176,11 @@
(mapcat (mapcat
(fn [e] (fn [e]
(cond (or (set? e) (cond (or (set? e)
(map? e) ; in case inline maps are ever extended (map? e)
(symbol? e) (symbol? e)
(and (i/fn-invocation? e) (contains? #{'fn* 'fn} (first e)))) (and (i/fn-invocation? e)
(or (contains? #{'fn* 'fn} (first e))
(special-symbol? (first e)))))
[e] [e]
(sequential? e) (sequential? e)

View file

@ -39,7 +39,7 @@
(symbol (str "->LateFn" i))) (symbol (str "->LateFn" i)))
(defn- mk-late-fn-record [i] (defn- mk-late-fn-record [i]
(let [fields (gensyms (inc i)) (let [fields (concat ['fn] (for [j (range i)] (symbol (str "arg" j))))
dparams (gensym "dynamic-params") dparams (gensym "dynamic-params")
resolvers (for [f fields] resolvers (for [f fields]
`(~'late-resolve ~f ~dparams))] `(~'late-resolve ~f ~dparams))]