aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool
diff options
context:
space:
mode:
authorEduardo Julian2019-03-13 19:55:56 -0400
committerEduardo Julian2019-03-13 19:55:56 -0400
commitd98d1cb26f8cd3aa49f9c1e9f461ae0ee176df7c (patch)
treeb3500454334fce41b034ab37a2e0594b62354eb2 /stdlib/source/lux/tool
parentf49a6d1b8ae5db27270f99ecf92c40c74a4334e3 (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.lux43
-rw-r--r--stdlib/source/lux/tool/compiler/default/platform.lux6
-rw-r--r--stdlib/source/lux/tool/compiler/program.lux96
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))
- )))