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