aboutsummaryrefslogtreecommitdiff
path: root/lux-jvm/source/luxc/lang/translation/jvm/expression.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-05-30 15:19:28 -0400
committerEduardo Julian2020-05-30 15:19:28 -0400
commitb4d0eba7485caf0c6cf58de1193a9114fa273d8b (patch)
treef6f7fa2967bb5923347db1ed1d4c9b08e56bf8c6 /lux-jvm/source/luxc/lang/translation/jvm/expression.lux
parent6eaa3b57f3f1ea2ce13b942bdb4ef502fc1729bc (diff)
Split new-luxc into lux-jvm and lux-r.
Diffstat (limited to 'lux-jvm/source/luxc/lang/translation/jvm/expression.lux')
-rw-r--r--lux-jvm/source/luxc/lang/translation/jvm/expression.lux72
1 files changed, 72 insertions, 0 deletions
diff --git a/lux-jvm/source/luxc/lang/translation/jvm/expression.lux b/lux-jvm/source/luxc/lang/translation/jvm/expression.lux
new file mode 100644
index 000000000..144e35f9b
--- /dev/null
+++ b/lux-jvm/source/luxc/lang/translation/jvm/expression.lux
@@ -0,0 +1,72 @@
+(.module:
+ [lux #*
+ [tool
+ [compiler
+ [language
+ [lux
+ ["." synthesis]
+ [phase
+ ["." extension]]]]]]]
+ [luxc
+ [lang
+ [host
+ [jvm (#+ Phase)]]]]
+ [//
+ ["." common]
+ ["." primitive]
+ ["." structure]
+ ["." reference]
+ ["." case]
+ ["." loop]
+ ["." function]])
+
+(def: #export (translate archive synthesis)
+ Phase
+ (case synthesis
+ (^ (synthesis.bit value))
+ (primitive.bit value)
+
+ (^ (synthesis.i64 value))
+ (primitive.i64 value)
+
+ (^ (synthesis.f64 value))
+ (primitive.f64 value)
+
+ (^ (synthesis.text value))
+ (primitive.text value)
+
+ (^ (synthesis.variant data))
+ (structure.variant translate archive data)
+
+ (^ (synthesis.tuple members))
+ (structure.tuple translate archive members)
+
+ (^ (synthesis.variable variable))
+ (reference.variable archive variable)
+
+ (^ (synthesis.constant constant))
+ (reference.constant archive constant)
+
+ (^ (synthesis.branch/let data))
+ (case.let translate archive data)
+
+ (^ (synthesis.branch/if data))
+ (case.if translate archive data)
+
+ (^ (synthesis.branch/case data))
+ (case.case translate archive data)
+
+ (^ (synthesis.loop/recur data))
+ (loop.recur translate archive data)
+
+ (^ (synthesis.loop/scope data))
+ (loop.scope translate archive data)
+
+ (^ (synthesis.function/apply data))
+ (function.call translate archive data)
+
+ (^ (synthesis.function/abstraction data))
+ (function.function translate archive data)
+
+ (#synthesis.Extension extension)
+ (extension.apply archive translate extension)))