(.module: [lux #* [abstract [monad (#+ do)]] [data [text format]] [tool [compiler ["." name] ["." reference (#+ Register Variable)] ["." phase ("operation/." monad) ["." generation]]]]] [luxc [lang [host [jvm (#+ Inst Operation) ["$t" type] ["_" inst]]]]] ["." //]) (template [ ] [(def: #export ( idx) (-> Nat Text) (|> idx %n (format )))] [foreign-name "f"] [partial-name "p"] ) (def: (foreign variable) (-> Register (Operation Inst)) (do phase.monad [function-class generation.context] (wrap (|>> (_.ALOAD 0) (_.GETFIELD function-class (|> variable .nat foreign-name) //.$Object))))) (def: local (-> Register (Operation Inst)) (|>> _.ALOAD operation/wrap)) (def: #export (variable variable) (-> Variable (Operation Inst)) (case variable (#reference.Local variable) (local variable) (#reference.Foreign variable) (foreign variable))) (def: #export (constant name) (-> Name (Operation Inst)) (do phase.monad [bytecode-name (generation.remember name)] (operation/wrap (_.GETSTATIC bytecode-name //.value-field //.$Object))))