(.module: lux (lux (control monad) (data [text] text/format) [macro] [host #+ do-to]) (luxc ["&" lang] (lang (host ["$" jvm] (jvm ["$t" type] ["$d" def] ["$i" inst])) ["la" analysis] ["ls" synthesis])) (// [".T" common])) (host.import java/lang/reflect/Field (get [Object] Object)) (host.import (java/lang/Class a) (getField [String] Field)) (def: #export (eval valueI) (-> $.Inst (Meta Any)) (do macro.Monad [current-module macro.current-module-name class-name (:: @ map %code (macro.gensym (format current-module "/eval"))) #let [store-name (text.replace-all "/" "." class-name) bytecode ($d.class #$.V1_6 #$.Public $.noneC class-name (list) ["java.lang.Object" (list)] (list) (|>> ($d.field #$.Public ($_ $.++F $.finalF $.staticF) commonT.value-field commonT.$Object) ($d.method #$.Public ($_ $.++M $.staticM $.strictM) "" ($t.method (list) #.None (list)) (|>> valueI ($i.PUTSTATIC store-name commonT.value-field commonT.$Object) $i.RETURN))))] _ (commonT.store-class store-name bytecode) class (commonT.load-class store-name)] (wrap (|> class (Class::getField [commonT.value-field]) (Field::get (host.null))))))