(.module: [library [lux (#- local) [abstract [monad (#+ do)]] [data [text ["%" format (#+ format)]]] [target [jvm ["." type]]] [tool [compiler [reference ["." variable (#+ Register Variable)]] ["." phase ("operation@." monad)] [meta [archive (#+ Archive)]] [language [lux ["." generation]]]]]]] [luxc [lang [host [jvm (#+ Inst Operation) ["_" inst]]]]] ["." // ["#." runtime]]) (template [ ] [(def: .public (-> Nat Text) (|>> %.nat (format )))] [foreign_name "f"] [partial_name "p"] ) (def: (foreign archive variable) (-> Archive Register (Operation Inst)) (do {@ phase.monad} [class_name (\ @ each //.class_name (generation.context archive))] (in (|>> (_.ALOAD 0) (_.GETFIELD (type.class class_name (list)) (|> variable .nat foreign_name) //.$Value))))) (def: local (-> Register Inst) (|>> _.ALOAD)) (def: .public (variable archive variable) (-> Archive Variable (Operation Inst)) (case variable (#variable.Local variable) (operation@in (local variable)) (#variable.Foreign variable) (foreign archive variable))) (def: .public (constant archive name) (-> Archive Name (Operation Inst)) (do {@ phase.monad} [class_name (\ @ each //.class_name (generation.remember archive name))] (in (_.GETSTATIC (type.class class_name (list)) //.value_field //.$Value))))