aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/generator/primitive.jvm.lux
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]
  )