From 498af2e0123c1ce65e46bf15fe3854266ad58f53 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 21 Jan 2018 12:58:48 -0400 Subject: - WIP: Host procedures for JS. --- .../luxc/lang/translation/js/statement.jvm.lux | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 new-luxc/source/luxc/lang/translation/js/statement.jvm.lux (limited to 'new-luxc/source/luxc/lang/translation/js/statement.jvm.lux') diff --git a/new-luxc/source/luxc/lang/translation/js/statement.jvm.lux b/new-luxc/source/luxc/lang/translation/js/statement.jvm.lux new file mode 100644 index 000000000..e430d22ae --- /dev/null +++ b/new-luxc/source/luxc/lang/translation/js/statement.jvm.lux @@ -0,0 +1,47 @@ +(.module: + lux + (lux (control [monad #+ do]) + [macro] + (data text/format)) + (luxc (lang [".L" module])) + [//] + (// [".T" runtime] + [".T" reference])) + +(def: #export (translate-def name expressionT expressionJS metaV) + (-> Text Type //.Expression Code (Meta Unit)) + (do macro.Monad + [current-module macro.current-module-name + #let [def-ident [current-module name]]] + (case (macro.get-symbol-ann (ident-for #.alias) metaV) + (#.Some real-def) + (do @ + [[realT realA realV] (macro.find-def real-def) + _ (moduleL.define def-ident [realT metaV realV])] + (wrap [])) + + _ + (do @ + [#let [def-name (referenceT.global def-ident)] + ## _ (hostT.save (format "var " def-name " = " expressionJS ";")) + #let [expressionV (: Top [])] + ## expressionV (hostT.eval def-name) + _ (moduleL.define def-ident [expressionT metaV expressionV]) + _ (if (macro.type? metaV) + (case (macro.declared-tags metaV) + #.Nil + (wrap []) + + tags + (moduleL.declare-tags tags (macro.export? metaV) (:! Type expressionV))) + (wrap [])) + #let [_ (log! (format "DEF " (%ident def-ident)))]] + (wrap [])) + ))) + +(def: #export (translate-program programJS) + (-> //.Expression (Meta //.Statement)) + (macro.fail "translate-program NOT IMPLEMENTED YET") + ## (hostT.save (format "var " (referenceT.variable +0) " = " runtimeT.lux//program-args "();" + ## "(" programJS ")(null);")) + ) -- cgit v1.2.3