-
Notifications
You must be signed in to change notification settings - Fork 0
/
macros.cljc
77 lines (64 loc) · 1.76 KB
/
macros.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
;; Copyright (c) Konrad Grzanek
;; Created 2018-08-27
(ns cljs.kongra.ch.macros)
#?(:clj (set! *warn-on-reflection* true))
#?(:clj
(defmacro chP
[expr]
(let [x (symbol "x")]
(if *assert*
`(fn [~x] (assert ~expr (cljc.kongra.ch/errMessage ~x)) ~x)
;; Elided version
`(fn [~x] ~x)))))
#?(:clj
(defmacro chSpec
[spec]
(let [x (symbol "x")]
(if *assert*
`(fn [~x] (cljs.spec.alpha/assert ~spec ~x))
;; Elided version
`(fn [~x] ~x)))))
#?(:clj
(defmacro chC
[expr]
(let [x (symbol "x")]
(if *assert*
`(fn
([check#]
(fn [~x]
(assert ~expr (cljc.kongra.ch/errMessage ~x))
(doseq [e# ~x] (check# e#))
~x))
([check# ~x]
(assert ~expr (cljc.kongra.ch/errMessage ~x))
(doseq [e# ~x] (check# e#))
~x))
`(fn ;; Elided version
([check# ] (fn [~x] ~x))
([check# ~x] ~x))))))
#?(:clj
(defmacro chD
[expr]
(let [x (symbol "x")]
(if *assert*
`(fn
([check#]
(fn [~x]
(assert ~expr (cljc.kongra.ch/errMessage ~x))
(check# (deref ~x))
~x))
([check# ~x]
(assert ~expr (cljc.kongra.ch/errMessage ~x))
(check# (deref ~x))
~x))
`(fn ;; Elided version
([check# ] (fn [~x] ~x))
([check# ~x] ~x))))))
#?(:clj
(defmacro chReg
([check]
(let [name (str check)]
`(chReg ~name ~check)))
([name check]
(when *assert* ;; Registering elided check makes no sense
`(swap! cljc.kongra.ch/checksRegistry assoc ~name ~check)))))