aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/tool/compiler/meta/io/archive.lux')
-rw-r--r--stdlib/source/library/lux/tool/compiler/meta/io/archive.lux90
1 files changed, 52 insertions, 38 deletions
diff --git a/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux b/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
index 79ff9881e..e89b45756 100644
--- a/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
+++ b/stdlib/source/library/lux/tool/compiler/meta/io/archive.lux
@@ -37,6 +37,7 @@
["/[1]" //
["[0]" archive {"+" Output Archive}
["[0]" registry {"+" Registry}]
+ ["[0]" module]
["[0]" descriptor {"+" Descriptor}]
["[0]" document {"+" Document}]
["[0]" artifact {"+" Artifact Dependency}
@@ -54,7 +55,7 @@
["[1]/[0]" program]]]]]])
(exception: .public (cannot_prepare [archive file.Path
- module_id archive.ID
+ module_id module.ID
error Text])
(exception.report
["Archive" archive]
@@ -80,13 +81,13 @@
(%.nat version.version)))
(def: (module fs static module_id)
- (All (_ !) (-> (file.System !) Static archive.ID file.Path))
+ (All (_ !) (-> (file.System !) Static module.ID file.Path))
(format (..versioned_lux_archive fs static)
(# fs separator)
(%.nat module_id)))
(def: .public (artifact fs static module_id artifact_id)
- (All (_ !) (-> (file.System !) Static archive.ID artifact.ID file.Path))
+ (All (_ !) (-> (file.System !) Static module.ID artifact.ID file.Path))
(format (..module fs static module_id)
(# fs separator)
(%.nat artifact_id)
@@ -101,7 +102,7 @@
(# fs make_directory path))))
(def: .public (prepare fs static module_id)
- (-> (file.System Async) Static archive.ID (Async (Try Any)))
+ (-> (file.System Async) Static module.ID (Async (Try Any)))
(do [! async.monad]
[.let [module (..module fs static module_id)]
module_exists? (# fs directory? module)]
@@ -121,7 +122,7 @@
error])))))))))
(def: .public (write fs static module_id artifact_id content)
- (-> (file.System Async) Static archive.ID artifact.ID Binary (Async (Try Any)))
+ (-> (file.System Async) Static module.ID artifact.ID Binary (Async (Try Any)))
(# fs write content (..artifact fs static module_id artifact_id)))
(def: .public (enable fs static)
@@ -144,24 +145,30 @@
"module_descriptor")
(def: (module_descriptor fs static module_id)
- (-> (file.System Async) Static archive.ID file.Path)
+ (-> (file.System Async) Static module.ID file.Path)
(format (..module fs static module_id)
(# fs separator)
..module_descriptor_file))
(def: .public (cache fs static module_id content)
- (-> (file.System Async) Static archive.ID Binary (Async (Try Any)))
+ (-> (file.System Async) Static module.ID Binary (Async (Try Any)))
(# fs write content (..module_descriptor fs static module_id)))
(def: (read_module_descriptor fs static module_id)
- (-> (file.System Async) Static archive.ID (Async (Try Binary)))
+ (-> (file.System Async) Static module.ID (Async (Try Binary)))
(# fs read (..module_descriptor fs static module_id)))
-(def: parser
- (Parser [Descriptor (Document .Module) Registry])
+(def: module_parser
+ (Parser (module.Module .Module))
($_ <>.and
+ <binary>.nat
descriptor.parser
- (document.parser $.parser)
+ (document.parser $.parser)))
+
+(def: parser
+ (Parser [(module.Module .Module) Registry])
+ ($_ <>.and
+ ..module_parser
registry.parser))
(def: (fresh_analysis_state host)
@@ -174,14 +181,16 @@
[modules (: (Try (List [descriptor.Module .Module]))
(monad.each ! (function (_ module)
(do !
- [[descriptor document output] (archive.find module archive)
- content (document.content $.key document)]
+ [entry (archive.find module archive)
+ content (|> entry
+ (value@ [archive.#module module.#document])
+ (document.content $.key))]
(in [module content])))
(archive.archived archive)))]
(in (with@ .#modules modules (fresh_analysis_state host)))))
(def: (cached_artifacts fs static module_id)
- (-> (file.System Async) Static archive.ID (Async (Try (Dictionary Text Binary))))
+ (-> (file.System Async) Static module.ID (Async (Try (Dictionary Text Binary))))
(let [! (try.with async.monad)]
(|> (..module fs static module_id)
(# fs directory_files)
@@ -216,7 +225,7 @@
(def: (loaded_document extension host module_id expected actual document)
(All (_ expression directive)
- (-> Text (generation.Host expression directive) archive.ID (Sequence [Artifact (Set Dependency)]) (Dictionary Text Binary) (Document .Module)
+ (-> Text (generation.Host expression directive) module.ID (Sequence [Artifact (Set Dependency)]) (Dictionary Text Binary) (Document .Module)
(Try [(Document .Module) Bundles Output])))
(do [! try.monad]
[[definitions bundles] (: (Try [Definitions Bundles Output])
@@ -352,23 +361,24 @@
(in [(document.document $.key (with@ .#definitions definitions content))
bundles])))
-(def: (load_definitions fs static module_id host_environment descriptor document registry)
+(def: (load_definitions fs static module_id host_environment entry)
(All (_ expression directive)
- (-> (file.System Async) Static archive.ID (generation.Host expression directive)
- Descriptor (Document .Module) Registry
+ (-> (file.System Async) Static module.ID (generation.Host expression directive)
+ (archive.Entry .Module)
(Async (Try [(archive.Entry .Module) Bundles]))))
(do (try.with async.monad)
[actual (cached_artifacts fs static module_id)
- .let [expected (registry.artifacts registry)]
- [document bundles output] (async#in (loaded_document (value@ static.#artifact_extension static) host_environment module_id expected actual document))]
- (in [[archive.#descriptor descriptor
- archive.#document document
- archive.#output output
- archive.#registry registry]
+ .let [expected (registry.artifacts (value@ archive.#registry entry))]
+ [document bundles output] (|> (value@ [archive.#module module.#document] entry)
+ (loaded_document (value@ static.#artifact_extension static) host_environment module_id expected actual)
+ async#in)]
+ (in [(|> entry
+ (with@ [archive.#module module.#document] document)
+ (with@ archive.#output output))
bundles])))
(def: (purge! fs static [module_name module_id])
- (-> (file.System Async) Static [descriptor.Module archive.ID] (Async (Try Any)))
+ (-> (file.System Async) Static [descriptor.Module module.ID] (Async (Try Any)))
(do [! (try.with async.monad)]
[.let [cache (..module fs static module_id)]
_ (|> cache
@@ -387,10 +397,10 @@
(value@ ////.#hash actual))))
(type: Cache
- [descriptor.Module [archive.ID [Descriptor (Document .Module) Registry]]])
+ [descriptor.Module [module.ID [(module.Module .Module) Registry]]])
(type: Purge
- (Dictionary descriptor.Module archive.ID))
+ (Dictionary descriptor.Module module.ID))
(def: initial_purge
(-> (List [Bit Cache])
@@ -405,13 +415,13 @@
(-> (List [Bit Cache])
(cache/module.Order .Module)
Purge)
- (list#mix (function (_ [module_name [module_id [descriptor document]]] purge)
+ (list#mix (function (_ [module_name [module_id entry]] purge)
(let [purged? (: (Predicate descriptor.Module)
(dictionary.key? purge))]
(if (purged? module_name)
purge
- (if (|> descriptor
- (value@ descriptor.#references)
+ (if (|> entry
+ (value@ [archive.#module module.#descriptor descriptor.#references])
set.list
(list.any? purged?))
(dictionary.has module_name module_id purge)
@@ -425,17 +435,17 @@
(def: (valid_cache fs static import contexts [module_name module_id])
(-> (file.System Async) Static Import (List Context)
- [descriptor.Module archive.ID]
+ [descriptor.Module module.ID]
(Async (Try [Bit Cache])))
- (with_expansions [<cache> [module_name [module_id [descriptor document registry]]]]
+ (with_expansions [<cache> [module_name [module_id [module registry]]]]
(do [! (try.with async.monad)]
[data (..read_module_descriptor fs static module_id)
- [descriptor document registry] (async#in (<binary>.result ..parser data))]
+ [module registry] (async#in (<binary>.result ..parser data))]
(if (text#= archive.runtime_module module_name)
(in [true <cache>])
(do !
[input (//context.read fs ..pseudo_module import contexts (value@ static.#host_module_extension static) module_name)]
- (in [(..valid_cache? descriptor input) <cache>]))))))
+ (in [(..valid_cache? (value@ module.#descriptor module) input) <cache>]))))))
(def: (pre_loaded_caches fs static import contexts archive)
(-> (file.System Async) Static Import (List Context) Archive
@@ -453,8 +463,12 @@
(Try (cache/module.Order .Module)))
(|> pre_loaded_caches
(monad.mix try.monad
- (function (_ [_ [module [module_id [descriptor document registry]]]] archive)
- (archive.has module [descriptor document (: Output sequence.empty) registry] archive))
+ (function (_ [_ [module [module_id [|module| registry]]]] archive)
+ (archive.has module
+ [archive.#module |module|
+ archive.#output (: Output sequence.empty)
+ archive.#registry registry]
+ archive))
archive)
(# try.monad each (cache/module.load_order $.key))
(# try.monad conjoint)))
@@ -468,9 +482,9 @@
[... TODO: Stop needing to wrap this expression in an unnecessary "do" expression.
it (|> load_order
(list.only (|>> product.left (dictionary.key? purge) not))
- (monad.each ! (function (_ [module_name [module_id [descriptor document _ registry]]])
+ (monad.each ! (function (_ [module_name [module_id entry]])
(do !
- [[entry bundles] (..load_definitions fs static module_id host_environment descriptor document registry)]
+ [[entry bundles] (..load_definitions fs static module_id host_environment entry)]
(in [[module_name entry]
bundles])))))]
(in it)))