blob: 01b3a2eee421cb54266270dc6718e059526f5c76 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
(.module:
[lux #*
[control
[monad (#+ do)]
["p" parser]]
[concurrency
["." promise (#+ Promise)]
["." task (#+ Task)]]
[data
["." error]
[text
format]]
["." io (#+ IO Process io)]
[time
["." instant]]
[cli (#+ program:)]
[world
["." file (#+ File)]
["." console]]
[compiler
["." cli]
["." default (#+ Platform)]]
["." interpreter]]
[luxc
[lang
["." host/jvm]
[translation
["." jvm
["." runtime]
["." expression]]]]])
(def: (or-crash! failure-description action)
(All [a]
(-> Text (Process a) (IO a)))
(do io.Monad<IO>
[?output action]
(case ?output
(#error.Error error)
(exec (log! (format "\n"
failure-description "\n"
error "\n"))
(io.exit +1))
(#error.Success output)
(wrap output))))
(def: (timed action)
(All [a]
(-> (Process a) (Process a)))
(do io.Monad<Process>
[start (io.from-io instant.now)
result action
finish (io.from-io instant.now)
#let [elapsed-time (instant.span start finish)
_ (log! (format "\n" "Elapsed time: " (%duration elapsed-time)))]]
(wrap result)))
(def: jvm-platform
(IO (Platform Process host/jvm.Anchor host/jvm.Inst host/jvm.Definition))
(do io.Monad<IO>
[host jvm.init]
(wrap {#default.host host
#default.phase expression.translate
#default.runtime runtime.translate
#default.file-system file.JVM@System})))
(program: [{service cli.service}]
(do io.Monad<IO>
[platform ..jvm-platform
console (:: @ map error.assume console.open)]
(case service
(#cli.Compilation configuration)
(<| (or-crash! "Compilation failed:")
..timed
(default.compile platform configuration))
(#cli.Interpretation configuration)
(<| (or-crash! "Interpretation failed:")
(interpreter.run io.Monad<Process> console platform configuration)))))
|