(;module: lux (lux (control [monad #+ do]) (data text/format) [meta "meta/" Monad]) (luxc ["&" base] (host ["$" jvm] (jvm ["$t" type] ["$i" inst])) (lang ["ls" synthesis] [";L" variable #+ Variable] (translation [";T" common] [";T" function])))) (def: #export (generate-captured variable) (-> Variable (Meta $;Inst)) (do meta;Monad [function-class commonT;function] (wrap (|>. ($i;ALOAD +0) ($i;GETFIELD function-class (|> variable i.inc (i.* -1) int-to-nat functionT;captured) commonT;$Object))))) (def: #export (generate-variable variable) (-> Variable (Meta $;Inst)) (meta/wrap ($i;ALOAD (int-to-nat variable)))) (def: #export (generate-definition [def-module def-name]) (-> Ident (Meta $;Inst)) (let [bytecode-name (format def-module "/" (&;normalize-name def-name))] (meta/wrap ($i;GETSTATIC bytecode-name commonT;value-field commonT;$Object))))