(.module: [library [lux {"-" [local]} [abstract [monad {"+" [do]}]] [data [text ["%" format {"+" [format]}]]] [target [jvm ["[0]" type]]] [tool [compiler [reference ["[0]" variable {"+" [Register Variable]}]] ["[0]" phase ("operation@[0]" monad)] [meta [archive {"+" [Archive]}]] [language [lux ["[0]" generation]]]]]]] [luxc [lang [host [jvm {"+" [Inst Operation]} ["_" inst]]]]] ["[0]" // ["[1][0]" 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))))