aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/jvm/primitive.lux
blob: 873c363bd67de6e83912f568796e01ecb6e360d5 (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
(.module:
  [lux (#- i64)
   [target
    [jvm
     ["." type]]]
   [tool
    [compiler
     [phase ("operation@." monad)]]]]
  [luxc
   [lang
    [host
     ["." jvm (#+ Inst Operation)
      ["_" inst]]]]])

(def: #export bit
  (-> Bit (Operation Inst))
  (let [Boolean (type.class "java.lang.Boolean" (list))]
    (function (_ value)
      (operation@wrap (_.GETSTATIC Boolean (if value "TRUE" "FALSE") Boolean)))))

(template [<name> <type> <load> <wrap>]
  [(def: #export (<name> value)
     (-> <type> (Operation Inst))
     (let [loadI (|> value <load>)]
       (operation@wrap (|>> loadI <wrap>))))]

  [i64  (I64 Any) (<| _.long .int) (_.wrap type.long)]
  [f64  Frac      _.double         (_.wrap type.double)]
  [text Text      _.string         (<|)]
  )