Compare commits
1 commit
master
...
lazy-names
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a45cef0566 |
1 changed files with 23 additions and 11 deletions
|
|
@ -7,7 +7,19 @@
|
|||
(fn
|
||||
([ctx pod-spec] (load-pod ctx pod-spec nil))
|
||||
([ctx pod-spec _opts]
|
||||
(let [env (:env ctx)
|
||||
(let [ns-load-fns (atom {})
|
||||
load-fn (fn load-fn [{:keys [:namespace]}]
|
||||
(when-let [f (get @ns-load-fns namespace)]
|
||||
(f)
|
||||
;; return empty source, for sci to evaluate
|
||||
""))
|
||||
env (:env ctx)
|
||||
prev-load-fn (:load-fn @env)
|
||||
new-load-fn (fn [m]
|
||||
(or (load-fn m)
|
||||
(when prev-load-fn
|
||||
(prev-load-fn m))))
|
||||
_ (swap! env assoc :load-fn new-load-fn)
|
||||
pod (binding [*out* @sci/out
|
||||
*err* @sci/err]
|
||||
(impl/load-pod
|
||||
|
|
@ -27,16 +39,16 @@
|
|||
v)
|
||||
v))))}))
|
||||
namespaces (:namespaces pod)]
|
||||
(doseq [[ns-name vars] namespaces
|
||||
:let [sci-ns (sci/create-ns ns-name)]]
|
||||
(sci/binding [sci/ns sci-ns]
|
||||
(doseq [[var-name var-value] vars]
|
||||
(cond (ifn? var-value)
|
||||
(swap! env assoc-in [:namespaces ns-name var-name]
|
||||
(sci/new-var
|
||||
(symbol (str ns-name) (str var-name)) var-value))
|
||||
(string? var-value)
|
||||
(sci/eval-string* ctx var-value)))))
|
||||
(doseq [[ns-name vars] namespaces]
|
||||
(swap! ns-load-fns assoc ns-name
|
||||
#(sci/binding [sci/ns (sci/create-ns ns-name)]
|
||||
(doseq [[var-name var-value] vars]
|
||||
(cond (ifn? var-value)
|
||||
(swap! env assoc-in [:namespaces ns-name var-name]
|
||||
(sci/new-var
|
||||
(symbol (str ns-name) (str var-name)) var-value))
|
||||
(string? var-value)
|
||||
(sci/eval-string* ctx var-value))))))
|
||||
(sci/future (impl/processor pod))
|
||||
{:pod/id (:pod-id pod)})))
|
||||
{:sci.impl/op :needs-ctx}))
|
||||
|
|
|
|||
Loading…
Reference in a new issue