From 0abd5bd3c0e38e352e9ba38268e04e1c858ab01e Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 15 Jul 2021 00:45:15 -0400 Subject: Re-named "spec" hierarchy to "specification". --- stdlib/source/specification/compositor/common.lux | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 stdlib/source/specification/compositor/common.lux (limited to 'stdlib/source/specification/compositor/common.lux') diff --git a/stdlib/source/specification/compositor/common.lux b/stdlib/source/specification/compositor/common.lux new file mode 100644 index 000000000..ed3b53f30 --- /dev/null +++ b/stdlib/source/specification/compositor/common.lux @@ -0,0 +1,81 @@ +(.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)]))))) -- cgit v1.2.3