Skip to content

Commit ab54b17

Browse files
committed
core: Add ys/def-vars-from-map function
1 parent c3a22bd commit ab54b17

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

core/src/yamlscript/global.clj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
(ns yamlscript.global
55
(:require
6-
[sci.core :as sci]))
6+
[sci.core :as sci])
7+
(:refer-clojure :exclude [create-ns
8+
intern]))
79

810
#_(defn WWW [& xs]
911
(println (apply str ">>> " xs) " <<<")
@@ -23,6 +25,12 @@
2325

2426
(def env {})
2527

28+
(defn create-ns [ns]
29+
(sci/create-ns ns))
30+
31+
(defn intern [ns vym val]
32+
(sci/intern @sci-ctx ns vym val))
33+
2634
(defn update-environ [m]
2735
(sci/alter-var-root ENV
2836
(fn [env]

core/src/ys/ys.clj

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
[yamlscript.common :refer [abspath dirname get-yspath]]
1111
[yamlscript.compiler]
1212
[yamlscript.global :as global]
13-
[yamlscript.re :as re])
13+
[yamlscript.re :as re]
14+
[yamlscript.util :as util])
1415
(:refer-clojure
1516
:exclude [compile
1617
eval
@@ -42,6 +43,34 @@
4243
(defn compile [code]
4344
(yamlscript.compiler/compile code))
4445

46+
(defn +def-vars [ns m]
47+
(let [ns
48+
(condf ns
49+
#(= (type %1) clojure.lang.Namespace) ns
50+
#(= (type %1) sci.lang.Namespace) ns
51+
string? (global/create-ns (symbol ns))
52+
symbol? (global/create-ns ns)
53+
(util/die (str "Invalid namespace for set-vars: '" ns "'")))]
54+
(reduce-kv
55+
(fn [_ k v]
56+
(let [key (condf k
57+
string? k
58+
keyword? (name k)
59+
symbol? (name k)
60+
(util/die (str "Invalid key for set-vars: '" k "'")))
61+
key (str/replace key #"_" "-")
62+
_ (when-not (re-matches re/symw key)
63+
(util/die (str "Invalid key for set-vars: '" key "'")))
64+
key (symbol key)]
65+
(global/intern ns key v)))
66+
nil m)))
67+
68+
(defmacro def-vars-from-map [ns m]
69+
`(let [[m# ns#] (if (~m "+")
70+
[(dissoc ~m "+") (symbol (~m "+"))]
71+
[~m ~ns])]
72+
(+def-vars ns# m#)))
73+
4574
(defn eval- [ys-code file stream-mode]
4675
(let [stream @global/stream-values
4776
_ (reset! global/stream-values [])

0 commit comments

Comments
 (0)