diff options
author | Eduardo Julian | 2019-03-13 19:55:56 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-03-13 19:55:56 -0400 |
commit | d98d1cb26f8cd3aa49f9c1e9f461ae0ee176df7c (patch) | |
tree | b3500454334fce41b034ab37a2e0594b62354eb2 /stdlib/source/lux/tool | |
parent | f49a6d1b8ae5db27270f99ecf92c40c74a4334e3 (diff) |
The general shape of the compiler has been recognized as a program unto itself (albeit a program which must be parameterized).
Diffstat (limited to 'stdlib/source/lux/tool')
-rw-r--r-- | stdlib/source/lux/tool/compiler/cli.lux | 43 | ||||
-rw-r--r-- | stdlib/source/lux/tool/compiler/default/platform.lux | 6 | ||||
-rw-r--r-- | stdlib/source/lux/tool/compiler/program.lux | 96 |
3 files changed, 4 insertions, 141 deletions
diff --git a/stdlib/source/lux/tool/compiler/cli.lux b/stdlib/source/lux/tool/compiler/cli.lux deleted file mode 100644 index e08c83c7e..000000000 --- a/stdlib/source/lux/tool/compiler/cli.lux +++ /dev/null @@ -1,43 +0,0 @@ -(.module: - [lux #* - [control - ["p" parser]] - ["." cli (#+ CLI)] - [world - [file (#+ Path)]]] - ## [/// - ## [importer (#+ Source)]] - ) - -(type: #export Configuration - {## #sources (List Source) - #sources (List Path) - #target Path - #module Text}) - -(type: #export Service - (#Compilation Configuration) - (#Interpretation Configuration)) - -(do-template [<name> <long>] - [(def: #export <name> - (CLI Text) - (cli.named <long> cli.any))] - - [source "--source"] - [target "--target"] - [module "--module"] - ) - -(def: #export configuration - (CLI Configuration) - ($_ p.and - (p.some ..source) - ..target - ..module)) - -(def: #export service - (CLI Service) - ($_ p.or - (p.after (cli.this "build") ..configuration) - (p.after (cli.this "repl") ..configuration))) diff --git a/stdlib/source/lux/tool/compiler/default/platform.lux b/stdlib/source/lux/tool/compiler/default/platform.lux index 529a4ed79..7748db721 100644 --- a/stdlib/source/lux/tool/compiler/default/platform.lux +++ b/stdlib/source/lux/tool/compiler/default/platform.lux @@ -24,12 +24,14 @@ ["." generation] [analysis ["." module]]] - ["." cli (#+ Configuration)] [meta ["." archive (#+ Archive) [descriptor (#+ Module)]] [io - ["." context]]]]]) + ["." context]]]]] + [program + [compositor + ["." cli (#+ Configuration)]]]) (type: #export (Platform ! anchor expression statement) {#&monad (Monad !) diff --git a/stdlib/source/lux/tool/compiler/program.lux b/stdlib/source/lux/tool/compiler/program.lux deleted file mode 100644 index 4a079cc0f..000000000 --- a/stdlib/source/lux/tool/compiler/program.lux +++ /dev/null @@ -1,96 +0,0 @@ -(.module: - [lux #* - [type (#+ :share)] - [cli (#+ program:)] - ["." io (#+ IO io)] - [control - [monad (#+ do)]] - [data - ["." error (#+ Error)] - ["." text - format]] - [time - ["." instant (#+ Instant)]] - [world - ["." console]] - [tool - [compiler - ["." statement] - [phase - [macro (#+ Expander)] - ["." generation]] - [default - ["." platform (#+ Platform)] - ["." syntax]] - [meta - ["." archive (#+ Archive)]]] - ## ["." interpreter] - ]] - [// - ["." cli (#+ Service)]]) - -(def: (or-crash! failure-description action) - (All [a] - (-> Text (IO (Error a)) (IO a))) - (do io.monad - [?output action] - (case ?output - (#error.Failure error) - (exec (log! (format text.new-line - failure-description text.new-line - error text.new-line)) - (io.exit +1)) - - (#error.Success output) - (wrap output)))) - -(def: (timed action) - (All [a] - (-> (-> Any (IO (Error a))) (IO (Error a)))) - (do (error.with io.monad) - [start (: (IO (Error Instant)) - (error.lift io.monad instant.now)) - result (action []) - finish (: (IO (Error Instant)) - (error.lift io.monad instant.now)) - #let [elapsed-time (instant.span start finish) - _ (log! (format text.new-line - "Elapsed time: " (%duration elapsed-time)))]] - (wrap result))) - -(def: #export (compiler expander platform bundle service) - (All [anchor expression statement] - (-> Expander - (IO (Platform IO anchor expression statement)) - (generation.Bundle anchor expression statement) - Service - (IO Any))) - (do io.monad - [platform platform - console (:: @ map error.assume console.system)] - (case service - (#cli.Compilation configuration) - (<| (or-crash! "Compilation failed:") - ..timed - (function (_ _) - (do (error.with io.monad) - [state (:share [anchor expression statement] - {(Platform IO anchor expression statement) - platform} - {(IO (Error (statement.State+ anchor expression statement))) - (platform.initialize expander platform bundle)}) - _ (:share [anchor expression statement] - {(Platform IO anchor expression statement) - platform} - {(IO (Error [Archive (statement.State+ anchor expression statement)])) - (platform.compile expander platform configuration archive.empty state)}) - ## _ (cache/io.clean target ...) - ] - (wrap (log! "Compilation complete!"))))) - - (#cli.Interpretation configuration) - ## TODO: Fix the interpreter... - (undefined) - ## (<| (or-crash! "Interpretation failed:") - ## (interpreter.run (error.with io.monad) console platform configuration bundle)) - ))) |