(.module: lux (lux (control [monad #+ do]) [macro] (data text/format)) (luxc (lang [".L" module] (host ["_" php #+ Expression Statement]))) [//] (// [".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 (_.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 Statement)) (macro.fail "translate-program NOT IMPLEMENTED YET") ## (hostT.save (format "var " (referenceT.variable +0) " = " runtimeT.lux//program-args "();" ## "(" programO ")(null);")) )