aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase/generation/jvm/primitive.lux
blob: d0d8199259e7f7b5eee1545b5f9c5d9cd881485b (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
(.module:
  [lux (#- i64)
   [abstract
    [monad (#+ do)]]
   [target
    [jvm
     ["|" descriptor]
     ["." constant]
     ["_" program (#+ Program)]]]
   [macro
    ["." template]]]
  ["." // #_
   ["#." runtime]])

(def: #export (bit value)
  (-> Bit (Program Any))
  (_.getstatic "java.lang.Boolean"
               (if value "TRUE" "FALSE")
               (|.object "java.lang.Boolean")))

(template [<name> <inputT> <ldc> <class> <inputD>]
  [(def: #export (<name> value)
     (-> <inputT> (Program Any))
     (do _.monad
       [_ (`` (|> value (~~ (template.splice <ldc>))))]
       (_.invokestatic <class> "valueOf"
                       (list <inputD>)
                       (|.object <class>))))]

  [i64 (I64 Any) [.int constant.long _.ldc/long] "java.lang.Long"   |.long]
  [f64 Frac      [constant.double _.ldc/double]    "java.lang.Double" |.double]
  )

(def: #export text _.ldc/string)