diff options
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/jvm/primitive.jvm.lux')
-rw-r--r-- | new-luxc/source/luxc/lang/translation/jvm/primitive.jvm.lux | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/new-luxc/source/luxc/lang/translation/jvm/primitive.jvm.lux b/new-luxc/source/luxc/lang/translation/jvm/primitive.jvm.lux new file mode 100644 index 000000000..f92c7025a --- /dev/null +++ b/new-luxc/source/luxc/lang/translation/jvm/primitive.jvm.lux @@ -0,0 +1,35 @@ +(.module: + lux + (lux (control monad) + (data text/format) + [macro "macro/" Monad<Meta>]) + (luxc ["&" lang] + (lang [".L" host] + (host ["$" jvm] + (jvm ["$i" inst] + ["$t" type])) + ["la" analysis] + ["ls" synthesis])) + (// [".T" common])) + +(def: #export translate-unit + (Meta $.Inst) + (macro/wrap ($i.string hostL.unit))) + +(def: #export (translate-bool value) + (-> Bool (Meta $.Inst)) + (macro/wrap ($i.GETSTATIC "java.lang.Boolean" + (if value "TRUE" "FALSE") + ($t.class "java.lang.Boolean" (list))))) + +(do-template [<name> <type> <load> <wrap>] + [(def: #export (<name> value) + (-> <type> (Meta $.Inst)) + (macro/wrap (|>> (<load> value) <wrap>)))] + + [translate-nat Nat (|>> (:! Int) $i.long) ($i.wrap #$.Long)] + [translate-int Int $i.long ($i.wrap #$.Long)] + [translate-deg Deg (|>> (:! Int) $i.long) ($i.wrap #$.Long)] + [translate-frac Frac $i.double ($i.wrap #$.Double)] + [translate-text Text $i.string id] + ) |