blob: 63a73260d5ececad9fc9b82e6028a74082c43382 (
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
(.module:
[lux (#- Module)
[type (#+ :share)]
["@" target (#+ Host)]
[abstract
[monad (#+ do)]]
[control
["." io (#+ IO io)]
["." try (#+ Try)]
[parser
[cli (#+ program:)]]
[security
["!" capability]]
[concurrency
["." promise (#+ Promise) ("#@." monad)]]]
[data
[binary (#+ Binary)]
["." product]
["." text
["%" format (#+ format)]]
[collection
["." dictionary]
["." row (#+ Row)]
["." list ("#@." functor fold)]]]
[time
["." instant (#+ Instant)]]
[world
["." file (#+ File Path)]
["." console]]
[tool
[compiler
["." phase]
[default
["." platform (#+ Platform)]]
[language
[lux
["." syntax]
["." analysis
[macro (#+ Expander)]]
["." generation (#+ Buffer)]
["." directive]
[phase
[extension (#+ Extender)]]]]
[meta
[archive (#+ Archive)
[descriptor (#+ Module)]]
[io
["ioW" archive]]]]
## ["." interpreter]
]]
["." / #_
["#." cli (#+ Service)]
["#." static (#+ Static)]
["#." export]])
(def: (or-crash! failure-description action)
(All [a]
(-> Text (Promise (Try a)) (Promise a)))
(do promise.monad
[?output action]
(case ?output
(#try.Failure error)
(exec (log! (format text.new-line
failure-description text.new-line
error text.new-line))
(io.run (io.exit +1)))
(#try.Success output)
(wrap output))))
(with-expansions [<parameters> (as-is anchor expression artifact)]
(def: #export (compiler static
expander host-analysis platform generation-bundle host-directive-bundle program extender
service
packager,package)
(All [<parameters>]
(-> Static
Expander
analysis.Bundle
(IO (Platform <parameters>))
(generation.Bundle <parameters>)
(directive.Bundle <parameters>)
(-> expression artifact)
Extender
Service
[(-> (Row [Module (generation.Buffer artifact)]) Binary) Path]
(Promise Any)))
(do {@ promise.monad}
[platform (promise.future platform)
console (|> console.system
promise.future
(:: @ map (|>> try.assume console.async)))]
(case service
(#/cli.Compilation compilation)
(<| (or-crash! "Compilation failed:")
(do (try.with promise.monad)
[#let [[compilation-sources compilation-libraries compilation-target compilation-module] compilation]
[state archive] (:share [<parameters>]
{(Platform <parameters>)
platform}
{(Promise (Try [(directive.State+ <parameters>)
Archive]))
(:assume (platform.initialize static compilation-module expander host-analysis platform generation-bundle host-directive-bundle program extender))})
[archive state] (:share [<parameters>]
{(Platform <parameters>)
platform}
{(Promise (Try [Archive (directive.State+ <parameters>)]))
(:assume (platform.compile compilation-libraries static expander platform compilation [archive state]))})
_ (ioW.freeze (get@ #platform.&file-system platform) (get@ #/static.host static) (get@ #/static.target static) archive)]
(wrap (log! "Compilation complete!"))))
(#/cli.Export export)
(<| (or-crash! "Export failed:")
(do (try.with promise.monad)
[_ (/export.export (get@ #platform.&file-system platform)
(get@ #/static.host-module-extension static)
export)]
(wrap (log! "Export complete!"))))
(#/cli.Interpretation interpretation)
## TODO: Fix the interpreter...
(undefined)
## (<| (or-crash! "Interpretation failed:")
## (interpreter.run (try.with promise.monad) console platform interpretation generation-bundle))
))))
|