(.module: [lux #* [abstract [monad (#+ do)]] [control ["." io (#+ IO)] ["." try (#+ Try)]] [tool [compiler ["." reference] ["." analysis] ["." synthesis (#+ Synthesis)] ["." directive] ["." phase ["." macro (#+ Expander)] ["." generation (#+ Operation)] [extension (#+ Extender) ["." bundle]]] [default ["." platform (#+ Platform)]]]]]) (type: #export Runner (-> Text Synthesis (Try Any))) (type: #export Definer (-> Name Synthesis (Try Any))) (type: #export (Instancer what) (All [anchor expression directive] (-> (Platform IO anchor expression directive) (generation.State+ anchor expression directive) what))) (def: (runner (^slots [#platform.runtime #platform.phase #platform.host]) state) (Instancer Runner) (function (_ evaluation-name expressionS) (do try.monad [expressionG (<| (phase.run state) generation.with-buffer (do phase.monad [_ runtime] (phase expressionS)))] (\ host evaluate! evaluation-name expressionG)))) (def: (definer (^slots [#platform.runtime #platform.phase #platform.host]) state) (Instancer Definer) (function (_ lux-name expressionS) (do try.monad [definitionG (<| (phase.run state) generation.with-buffer (do phase.monad [_ runtime expressionG (phase expressionS) [host-name host-value host-directive] (generation.define! lux-name expressionG) _ (generation.learn lux-name host-name)] (phase (synthesis.constant lux-name))))] (\ host evaluate! "definer" definitionG)))) (def: #export (executors target expander platform analysis-bundle generation-bundle directive-bundle program extender) (All [anchor expression directive] (-> Text Expander (Platform IO anchor expression directive) analysis.Bundle (generation.Bundle anchor expression directive) (directive.Bundle anchor expression directive) (-> expression directive) Extender (IO (Try [(directive.State+ anchor expression directive) Runner Definer])))) (do io.monad [?state (platform.initialize target expander analysis-bundle platform generation-bundle directive-bundle program extender)] (wrap (do try.monad [[directive-bundle directive-state] ?state #let [generation-state (get@ [#directive.generation #directive.state] directive-state)]] (wrap [[directive-bundle directive-state] (..runner platform generation-state) (..definer platform generation-state)])))))