aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/tool/compiler/default/platform.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/library/lux/tool/compiler/default/platform.lux118
1 files changed, 68 insertions, 50 deletions
diff --git a/stdlib/source/library/lux/tool/compiler/default/platform.lux b/stdlib/source/library/lux/tool/compiler/default/platform.lux
index b7fb40f56..96c638d52 100644
--- a/stdlib/source/library/lux/tool/compiler/default/platform.lux
+++ b/stdlib/source/library/lux/tool/compiler/default/platform.lux
@@ -1,6 +1,6 @@
(.using
[library
- [lux {"-" Module}
+ [lux "*"
[type {"+" :sharing}]
["@" target]
["[0]" debug]
@@ -48,12 +48,13 @@
[phase
["[0]" extension {"+" Extender}]
[analysis
- ["[0]" module]]]]]
+ ["[0]A" module]]]]]
[meta
["[0]" archive {"+" Output Archive}
["[0]" registry {"+" Registry}]
["[0]" artifact]
- ["[0]" descriptor {"+" Descriptor Module}]
+ ["[0]" module]
+ ["[0]" descriptor {"+" Descriptor}]
["[0]" document {"+" Document}]]
[io {"+" Context}
["[0]" context]
@@ -89,16 +90,18 @@
<Bundle> (as_is (///generation.Bundle <type_vars>))]
(def: writer
- (Writer [Descriptor (Document .Module) Registry])
+ (Writer [(module.Module .Module) Registry])
($_ _.and
- descriptor.writer
- (document.writer $.writer)
+ ($_ _.and
+ _.nat
+ descriptor.writer
+ (document.writer $.writer))
registry.writer
))
- (def: (cache_module static platform module_id [descriptor document output registry])
+ (def: (cache_module static platform module_id entry)
(All (_ <type_vars>)
- (-> Static <Platform> archive.ID (archive.Entry Any)
+ (-> Static <Platform> module.ID (archive.Entry Any)
(Async (Try Any))))
(let [system (value@ #&file_system platform)
write_artifact! (: (-> [artifact.ID (Maybe Text) Binary] (Action Any))
@@ -106,19 +109,25 @@
(ioW.write system static module_id artifact_id content)))]
(do [! ..monad]
[_ (ioW.prepare system static module_id)
- _ (for [@.python (|> output
+ _ (for [@.python (|> entry
+ (value@ archive.#output)
sequence.list
(list.sub 128)
(monad.each ! (monad.each ! write_artifact!))
(: (Action (List (List Any)))))]
- (|> output
+ (|> entry
+ (value@ archive.#output)
sequence.list
(monad.each ..monad write_artifact!)
(: (Action (List Any)))))
document (# async.monad in
- (document.marked? $.key document))]
- (ioW.cache system static module_id
- (_.result ..writer [descriptor document registry])))))
+ (document.marked? $.key (value@ [archive.#module module.#document] entry)))]
+ (|> [(|> entry
+ (value@ archive.#module)
+ (with@ module.#document document))
+ (value@ archive.#registry entry)]
+ (_.result ..writer)
+ (ioW.cache system static module_id)))))
... TODO: Inline ASAP
(def: initialize_buffer!
@@ -144,7 +153,13 @@
(def: runtime_document
(Document .Module)
- (document.document $.key (module.empty 0)))
+ (document.document $.key (moduleA.empty 0)))
+
+ (def: runtime_module
+ (module.Module .Module)
+ [module.#id module.runtime
+ module.#descriptor runtime_descriptor
+ module.#document runtime_document])
(def: (process_runtime archive platform)
(All (_ <type_vars>)
@@ -154,12 +169,13 @@
(do ///phase.monad
[[registry payload] (///directive.lifted_generation
(..compile_runtime! platform))
+ .let [entry [..runtime_module payload registry]]
archive (///phase.lifted (if (archive.reserved? archive archive.runtime_module)
- (archive.has archive.runtime_module [..runtime_descriptor ..runtime_document payload registry] archive)
+ (archive.has archive.runtime_module entry archive)
(do try.monad
[[_ archive] (archive.reserve archive.runtime_module archive)]
- (archive.has archive.runtime_module [..runtime_descriptor ..runtime_document payload registry] archive))))]
- (in [archive [..runtime_descriptor ..runtime_document payload registry]])))
+ (archive.has archive.runtime_module entry archive))))]
+ (in [archive entry])))
(def: (initialize_state extender
[analysers
@@ -226,7 +242,7 @@
import compilation_sources)
(All (_ <type_vars>)
(-> Static
- Module
+ descriptor.Module
Expander
///analysis.Bundle
<Platform>
@@ -278,7 +294,7 @@
(def: (module_compilation_log module)
(All (_ <type_vars>)
- (-> Module <State+> Text))
+ (-> descriptor.Module <State+> Text))
(|>> (value@ [extension.#state
///directive.#generation
///directive.#state
@@ -299,11 +315,11 @@
sequence.empty))
(def: empty
- (Set Module)
+ (Set descriptor.Module)
(set.empty text.hash))
(type: Mapping
- (Dictionary Module (Set Module)))
+ (Dictionary descriptor.Module (Set descriptor.Module)))
(type: Dependence
(Record
@@ -317,8 +333,8 @@
#depended_by empty]))
(def: (depend module import dependence)
- (-> Module Module Dependence Dependence)
- (let [transitive_dependency (: (-> (-> Dependence Mapping) Module (Set Module))
+ (-> descriptor.Module descriptor.Module Dependence Dependence)
+ (let [transitive_dependency (: (-> (-> Dependence Mapping) descriptor.Module (Set descriptor.Module))
(function (_ lens module)
(|> dependence
lens
@@ -326,7 +342,7 @@
(maybe.else ..empty))))
transitive_depends_on (transitive_dependency (value@ #depends_on) import)
transitive_depended_by (transitive_dependency (value@ #depended_by) module)
- update_dependence (: (-> [Module (Set Module)] [Module (Set Module)]
+ update_dependence (: (-> [descriptor.Module (Set descriptor.Module)] [descriptor.Module (Set descriptor.Module)]
(-> Mapping Mapping))
(function (_ [source forward] [target backward])
(function (_ mapping)
@@ -349,8 +365,8 @@
[import transitive_depended_by])))))
(def: (circular_dependency? module import dependence)
- (-> Module Module Dependence Bit)
- (let [dependence? (: (-> Module (-> Dependence Mapping) Module Bit)
+ (-> descriptor.Module descriptor.Module Dependence Bit)
+ (let [dependence? (: (-> descriptor.Module (-> Dependence Mapping) descriptor.Module Bit)
(function (_ from relationship to)
(let [targets (|> dependence
relationship
@@ -360,24 +376,24 @@
(or (dependence? import (value@ #depends_on) module)
(dependence? module (value@ #depended_by) import))))
- (exception: .public (module_cannot_import_itself [module Module])
+ (exception: .public (module_cannot_import_itself [module descriptor.Module])
(exception.report
["Module" (%.text module)]))
- (exception: .public (cannot_import_circular_dependency [importer Module
- importee Module])
+ (exception: .public (cannot_import_circular_dependency [importer descriptor.Module
+ importee descriptor.Module])
(exception.report
["Importer" (%.text importer)]
["importee" (%.text importee)]))
- (exception: .public (cannot_import_twice [importer Module
- duplicates (Set Module)])
+ (exception: .public (cannot_import_twice [importer descriptor.Module
+ duplicates (Set descriptor.Module)])
(exception.report
["Importer" (%.text importer)]
["Duplicates" (%.list %.text (set.list duplicates))]))
(def: (verify_dependencies importer importee dependence)
- (-> Module Module Dependence (Try Any))
+ (-> descriptor.Module descriptor.Module Dependence (Try Any))
(cond (text#= importer importee)
(exception.except ..module_cannot_import_itself [importer])
@@ -440,8 +456,8 @@
<Return> (as_is (Async <Result>))
<Signal> (as_is (Resolver <Result>))
<Pending> (as_is [<Return> <Signal>])
- <Importer> (as_is (-> Module Module <Return>))
- <Compiler> (as_is (-> Module <Importer> archive.ID <Context> Module <Return>))]
+ <Importer> (as_is (-> descriptor.Module descriptor.Module <Return>))
+ <Compiler> (as_is (-> descriptor.Module <Importer> module.ID <Context> descriptor.Module <Return>))]
(def: (parallel initial)
(All (_ <type_vars>)
(-> <Context>
@@ -451,7 +467,7 @@
<Context>
initial
- (Var (Dictionary Module <Pending>))
+ (Var (Dictionary descriptor.Module <Pending>))
(:expected (stm.var (dictionary.empty text.hash))))
dependence (: (Var Dependence)
(stm.var ..independence))]
@@ -463,7 +479,7 @@
initial
(Async [<Return> (Maybe [<Context>
- archive.ID
+ module.ID
<Signal>])])
(:expected
(stm.commit!
@@ -543,8 +559,10 @@
(do [! try.monad]
[modules (monad.each ! (function (_ module)
(do !
- [[descriptor document output] (archive.find module archive)
- lux_module (document.content $.key document)]
+ [entry (archive.find module archive)
+ lux_module (|> entry
+ (value@ [archive.#module module.#document])
+ (document.content $.key))]
(in [module lux_module])))
(archive.archived archive))
.let [additions (|> modules
@@ -571,7 +589,7 @@
(def: (set_current_module module state)
(All (_ <type_vars>)
- (-> Module <State+> <State+>))
+ (-> descriptor.Module <State+> <State+>))
(|> (///directive.set_current_module module)
(///phase.result' state)
try.trusted
@@ -581,8 +599,8 @@
... This currently assumes that all imports will be specified once in a single .using form.
... This might not be the case in the future.
(def: (with_new_dependencies new_dependencies all_dependencies)
- (-> (List Module) (Set Module) [(Set Module) (Set Module)])
- (let [[all_dependencies duplicates _] (: [(Set Module) (Set Module) Bit]
+ (-> (List descriptor.Module) (Set descriptor.Module) [(Set descriptor.Module) (Set descriptor.Module)])
+ (let [[all_dependencies duplicates _] (: [(Set descriptor.Module) (Set descriptor.Module) Bit]
(list#mix (function (_ new [all duplicates seen_prelude?])
(if (set.member? all new)
(if (text#= .prelude_module new)
@@ -591,14 +609,14 @@
[all duplicates true])
[all (set.has new duplicates) seen_prelude?])
[(set.has new all) duplicates seen_prelude?]))
- (: [(Set Module) (Set Module) Bit]
+ (: [(Set descriptor.Module) (Set descriptor.Module) Bit]
[all_dependencies ..empty (set.empty? all_dependencies)])
new_dependencies))]
[all_dependencies duplicates]))
(def: (after_imports import! module duplicates new_dependencies [archive state])
(All (_ <type_vars>)
- (-> <Importer> Module (Set Module) (List Module) <Context> <Return>))
+ (-> <Importer> descriptor.Module (Set descriptor.Module) (List descriptor.Module) <Context> <Return>))
(do [! (try.with async.monad)]
[]
(if (set.empty? duplicates)
@@ -622,7 +640,7 @@
(def: (next_compilation module [archive state] compilation)
(All (_ <type_vars>)
- (-> Module <Context> (///.Compilation <State+> .Module Any)
+ (-> descriptor.Module <Context> (///.Compilation <State+> .Module Any)
(Try [<State+> (Either (///.Compilation <State+> .Module Any)
(archive.Entry Any))])))
((value@ ///.#process compilation)
@@ -655,7 +673,7 @@
module)]
(loop [[archive state] [archive (..set_current_module module state)]
compilation (compiler input)
- all_dependencies (: (Set Module)
+ all_dependencies (: (Set descriptor.Module)
(set.of_list text.hash (list)))]
(do !
[.let [new_dependencies (value@ ///.#dependencies compilation)
@@ -669,12 +687,12 @@
<Platform>
platform
- (-> <Context> (///.Compilation <State+> .Module Any) (Set Module)
+ (-> <Context> (///.Compilation <State+> .Module Any) (Set descriptor.Module)
(Action [Archive <State+>]))
(:expected again))]
(continue! [archive state] more all_dependencies))
- {.#Right [descriptor document output]}
+ {.#Right entry}
(do !
[_ (let [report (..module_compilation_log module state)]
(with_expansions [<else> (in (debug.log! report))]
@@ -685,9 +703,9 @@
{.#Some console}
(console.write_line report console))]
<else>)))
- .let [descriptor (with@ descriptor.#references all_dependencies descriptor)]
- _ (..cache_module static platform module_id [descriptor document output])]
- (case (archive.has module [descriptor document output] archive)
+ .let [entry (with@ [archive.#module module.#descriptor descriptor.#references] all_dependencies entry)]
+ _ (..cache_module static platform module_id entry)]
+ (case (archive.has module entry archive)
{try.#Success archive}
(in [archive
(..with_reset_log state)])