(.module: lux (lux [macro] (data [text] text/format)) (luxc ["&" lang] (lang [".L" variable #+ Variable Register] (host [lua #+ Lua Expression Statement]))) [//] (// [".T" runtime])) (template [ ] [(def: #export ( register) (-> Register Expression) (format (%i (.int register)))) (def: #export ( register) (-> Register (Meta Expression)) (:: macro.Monad wrap ( register)))] [closure translate-captured "c"] [variable translate-local "v"]) (def: #export (translate-variable var) (-> Variable (Meta Expression)) (if (variableL.captured? var) (translate-captured (variableL.captured-register var)) (translate-local (.nat var)))) (def: #export global (-> Name Expression) //.definition-name) (def: #export (translate-definition name) (-> Name (Meta Expression)) (:: macro.Monad wrap (global name)))