(.module: lux (lux [macro] (data [text] text/format)) (luxc ["&" lang] (lang [".L" variable #+ Variable Register])) [//] (// [".T" runtime])) (do-template [ ] [(def: #export ( register) (-> Register //.Expression) (format (%i (nat-to-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 (int-to-nat var)))) (def: #export global (-> Ident //.Expression) //.definition-name) (def: #export (translate-definition name) (-> Ident (Meta //.Expression)) (:: macro.Monad wrap (global name)))