blob: 2c879dd489150ec92e780c287e0635cfca031add (
plain)
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
|
(;module:
lux
(lux (control monad)
(data text/format)
[macro #+ Monad<Lux> "Lux/" Monad<Lux>]
[host #+ jvm-import])
(luxc ["&" base]
(lang ["la" analysis]
["ls" synthesis])
["&;" analyser]
["&;" synthesizer]
(generator ["&;" common])))
(jvm-import #long java.lang.Object)
(jvm-import org.objectweb.asm.Opcodes)
(jvm-import org.objectweb.asm.MethodVisitor
(visitLdcInsn [Object] void))
(def: #export generate-unit
(Lux Unit)
(do Monad<Lux>
[visitor &common;get-visitor
#let [_ (MethodVisitor.visitLdcInsn [(:! java.lang.Object &common;unit)] visitor)]]
(wrap [])))
(do-template [<name> <type> <wrap>]
[(def: #export (<name> value)
(-> <type> (Lux Unit))
(do Monad<Lux>
[visitor &common;get-visitor
#let [_ (MethodVisitor.visitLdcInsn [(:! java.lang.Object value)] visitor)
_ (<wrap> visitor)]]
(wrap [])))]
[generate-bool Bool &common;wrap-boolean]
[generate-nat Nat &common;wrap-long]
[generate-int Int &common;wrap-long]
[generate-deg Deg &common;wrap-long]
[generate-real Real &common;wrap-double]
[generate-char Char &common;wrap-char]
[generate-text Text id]
)
|