From b4d0eba7485caf0c6cf58de1193a9114fa273d8b Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sat, 30 May 2020 15:19:28 -0400 Subject: Split new-luxc into lux-jvm and lux-r. --- .../luxc/lang/translation/r/statement.jvm.lux | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lux-r/source/luxc/lang/translation/r/statement.jvm.lux (limited to 'lux-r/source/luxc/lang/translation/r/statement.jvm.lux') diff --git a/lux-r/source/luxc/lang/translation/r/statement.jvm.lux b/lux-r/source/luxc/lang/translation/r/statement.jvm.lux new file mode 100644 index 000000000..1798cb56d --- /dev/null +++ b/lux-r/source/luxc/lang/translation/r/statement.jvm.lux @@ -0,0 +1,45 @@ +(.module: + lux + (lux (control [monad #+ do]) + [macro] + (data text/format)) + (luxc (lang [".L" module] + (host [r #+ Expression @@]))) + [//] + (// [".T" runtime] + [".T" reference] + [".T" eval])) + +(def: #export (translate-def name expressionT expressionO metaV) + (-> Text Type Expression Code (Meta Any)) + (do {@ macro.Monad} + [current-module macro.current-module-name + #let [def-name [current-module name]]] + (case (macro.get-identifier-ann (name-of #.alias) metaV) + (#.Some real-def) + (do @ + [[realT realA realV] (macro.find-def real-def) + _ (moduleL.define def-name [realT metaV realV])] + (wrap [])) + + _ + (do @ + [#let [def-name (referenceT.global def-name)] + _ (//.save (r.set! def-name expressionO)) + expressionV (evalT.eval (@@ def-name)) + _ (moduleL.define def-name [expressionT metaV expressionV]) + _ (if (macro.type? metaV) + (case (macro.declared-tags metaV) + #.Nil + (wrap []) + + tags + (moduleL.declare-tags tags (macro.export? metaV) (:coerce Type expressionV))) + (wrap [])) + #let [_ (log! (format "DEF " (%name def-name)))]] + (wrap [])) + ))) + +(def: #export (translate-program programO) + (-> Expression (Meta Expression)) + (macro.fail "translate-program NOT IMPLEMENTED YET")) -- cgit v1.2.3