allow non-dynamic vars to be treated as constants and add test for constant detection
This commit is contained in:
parent
1b5b19c7c8
commit
21f117503e
2 changed files with 25 additions and 6 deletions
|
|
@ -709,7 +709,9 @@
|
||||||
([v] (set-cell! MUST-CACHE-PATHS v)))
|
([v] (set-cell! MUST-CACHE-PATHS v)))
|
||||||
|
|
||||||
(defn constant-node? [node]
|
(defn constant-node? [node]
|
||||||
(cond (record? node) false
|
(cond (and (instance? VarUse node)
|
||||||
|
(-> node :var meta :dynamic not)) true
|
||||||
|
(record? node) false
|
||||||
(number? node) true
|
(number? node) true
|
||||||
(keyword? node) true
|
(keyword? node) true
|
||||||
(string? node) true
|
(string? node) true
|
||||||
|
|
@ -719,6 +721,16 @@
|
||||||
(every? constant-node? (keys node)))
|
(every? constant-node? (keys node)))
|
||||||
:else false))
|
:else false))
|
||||||
|
|
||||||
|
(defn extract-constant [node]
|
||||||
|
(cond (some #(% node) [number? keyword? string?]) node
|
||||||
|
(instance? VarUse node) (:val node)
|
||||||
|
(vector? node) (vec (map extract-constant node))
|
||||||
|
(set? node) (set (map extract-constant node))
|
||||||
|
(map? node) (->> node
|
||||||
|
(map (fn [[k v]] [(extract-constant k) (extract-constant v)]))
|
||||||
|
(into {}))
|
||||||
|
:else (throw-illegal "Unknown node " node)))
|
||||||
|
|
||||||
|
|
||||||
(defn- extract-original-code [p]
|
(defn- extract-original-code [p]
|
||||||
(cond
|
(cond
|
||||||
|
|
@ -925,7 +937,7 @@
|
||||||
(cond
|
(cond
|
||||||
(or (root-params-nav? vv) (instance? ParamsNeededPath vv))
|
(or (root-params-nav? vv) (instance? ParamsNeededPath vv))
|
||||||
(if (every? constant-node? ps)
|
(if (every? constant-node? ps)
|
||||||
(apply vv ps)
|
(apply vv (map extract-constant ps))
|
||||||
(do
|
(do
|
||||||
(swap! params-atom #(vec (concat % ps)))
|
(swap! params-atom #(vec (concat % ps)))
|
||||||
(coerce-path vv)))
|
(coerce-path vv)))
|
||||||
|
|
@ -969,7 +981,7 @@
|
||||||
|
|
||||||
(and (fn? vv) (-> vv meta :layerednav))
|
(and (fn? vv) (-> vv meta :layerednav))
|
||||||
(if (every? constant-node? ps)
|
(if (every? constant-node? ps)
|
||||||
(apply vv ps)
|
(apply vv (map extract-constant ps))
|
||||||
(do
|
(do
|
||||||
(swap! params-atom conj (:code p))
|
(swap! params-atom conj (:code p))
|
||||||
(if (= (-> vv meta :layerednav) :lean)
|
(if (= (-> vv meta :layerednav) :lean)
|
||||||
|
|
@ -992,7 +1004,7 @@
|
||||||
:else
|
:else
|
||||||
(cond (set? p)
|
(cond (set? p)
|
||||||
(if (constant-node? p)
|
(if (constant-node? p)
|
||||||
p
|
(extract-constant p)
|
||||||
(do (swap! params-atom conj p)
|
(do (swap! params-atom conj p)
|
||||||
pred*))
|
pred*))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
nav declarepath providepath select select-one select-one!
|
nav declarepath providepath select select-one select-one!
|
||||||
select-first transform setval replace-in defnavconstructor
|
select-first transform setval replace-in defnavconstructor
|
||||||
select-any selected-any? collected? traverse
|
select-any selected-any? collected? traverse
|
||||||
multi-transform]]))
|
multi-transform path]]))
|
||||||
(:use
|
(:use
|
||||||
#?(:clj [clojure.test :only [deftest is]])
|
#?(:clj [clojure.test :only [deftest is]])
|
||||||
#?(:clj [clojure.test.check.clojure-test :only [defspec]])
|
#?(:clj [clojure.test.check.clojure-test :only [defspec]])
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
nav declarepath providepath select select-one select-one!
|
nav declarepath providepath select select-one select-one!
|
||||||
select-first transform setval replace-in defnavconstructor
|
select-first transform setval replace-in defnavconstructor
|
||||||
select-any selected-any? collected? traverse
|
select-any selected-any? collected? traverse
|
||||||
multi-transform]]))
|
multi-transform path]]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1341,3 +1341,10 @@
|
||||||
|
|
||||||
|
|
||||||
1))))
|
1))))
|
||||||
|
|
||||||
|
(deftest inline-lean-path
|
||||||
|
;; use executors from ALL because it's a lean navigator
|
||||||
|
(let [e (.-executors s/ALL)]
|
||||||
|
(is (identical? e (.-executors (path :a (s/view inc)))))
|
||||||
|
(is (identical? e (.-executors (path (s/keypath :a) (s/srange 2 7)))))
|
||||||
|
(is (identical? e (.-executors (path :a (s/selected? (s/view inc) (s/selected? (s/srange 2 7)))))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue