aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source
diff options
context:
space:
mode:
authorEduardo Julian2018-08-11 10:59:38 -0400
committerEduardo Julian2018-08-11 10:59:38 -0400
commit0fe039a41571328a29b7a620643fc5e30e32b9a3 (patch)
tree0593a3ca8ff0e23f3d73647e9015ab01f57f77e6 /stdlib/source
parent13265c95fcacf9952bc61ebece64078d8b6124ec (diff)
Moved CLI machinery to stdlib.
Diffstat (limited to 'stdlib/source')
-rw-r--r--stdlib/source/lux/compiler/cli.lux53
-rw-r--r--stdlib/source/lux/compiler/default.lux7
2 files changed, 55 insertions, 5 deletions
diff --git a/stdlib/source/lux/compiler/cli.lux b/stdlib/source/lux/compiler/cli.lux
new file mode 100644
index 000000000..a73eb5a15
--- /dev/null
+++ b/stdlib/source/lux/compiler/cli.lux
@@ -0,0 +1,53 @@
+(.module:
+ [lux #*
+ [control
+ ["p" parser]]
+ ["." cli (#+ CLI)]
+ [world
+ [file (#+ File)]]])
+
+(type: #export Configuration
+ {#sources (List File)
+ #target File})
+
+(type: #export Build
+ [Configuration Text])
+
+(type: #export REPL
+ Configuration)
+
+(type: #export Service
+ (#Build Build)
+ (#REPL REPL))
+
+(do-template [<name> <short> <long>]
+ [(def: #export <name>
+ (CLI Text)
+ (cli.parameter [<short> <long>]))]
+
+ [source "-s" "--source"]
+ [target "-t" "--target"]
+ [program "-p" "--program"]
+ )
+
+(def: #export configuration
+ (CLI Configuration)
+ ($_ p.and
+ (p.some ..source)
+ ..target))
+
+(def: #export build
+ (CLI Build)
+ ($_ p.and
+ configuration
+ ..program))
+
+(def: #export repl
+ (CLI REPL)
+ ..configuration)
+
+(def: #export service
+ (CLI Service)
+ ($_ p.or
+ (p.after (cli.this "build") ..build)
+ (p.after (cli.this "repl") ..repl)))
diff --git a/stdlib/source/lux/compiler/default.lux b/stdlib/source/lux/compiler/default.lux
index f06a235de..cb93fdba4 100644
--- a/stdlib/source/lux/compiler/default.lux
+++ b/stdlib/source/lux/compiler/default.lux
@@ -16,6 +16,7 @@
[world
["." file (#+ File)]]]
[//
+ ["." cli (#+ Configuration)]
[meta
[io
["." context]]]]
@@ -64,10 +65,6 @@
## ## (format module-name "/" cache.descriptor-name)
## ## (encoding.to-utf8 (%code (cache/description.write file-name module))))))
-(type: #export Configuration
- {#sources (List File)
- #target File})
-
(type: #export (Platform fs anchor expression statement)
{#host (Host expression statement)
#phase (translation.Phase anchor expression statement)
@@ -126,7 +123,7 @@
(-> <Platform> Configuration Text <Compiler> (fs <Compiler>)))
(do (:: (get@ #file-system platform) &monad)
[source (context.read (get@ #file-system platform)
- (get@ #sources configuration)
+ (get@ #cli.sources configuration)
module-name)
## _ (&io.prepare-module target-dir module-name)
## _ (write-module target-dir file-name module-name module artifacts)