diff options
author | Eduardo Julian | 2019-02-24 12:26:17 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-02-24 12:26:17 -0400 |
commit | a72e34d30eaf3557f9b76ced9605a95759ce8eca (patch) | |
tree | 5fd88f66ac3b2b0abb5561521f806afb93c5134e /stdlib/source/lux/tool/compiler/meta/io/context.lux | |
parent | 950ac7c3311ad8ff4499164a30610fca2e57d5c9 (diff) |
Got new-luxc to compile/build again.
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/tool/compiler/meta/io/context.lux | 112 |
1 files changed, 61 insertions, 51 deletions
diff --git a/stdlib/source/lux/tool/compiler/meta/io/context.lux b/stdlib/source/lux/tool/compiler/meta/io/context.lux index be72e4ccc..f526a3738 100644 --- a/stdlib/source/lux/tool/compiler/meta/io/context.lux +++ b/stdlib/source/lux/tool/compiler/meta/io/context.lux @@ -1,16 +1,19 @@ (.module: [lux (#- Module Code) [control - monad - ["ex" exception (#+ Exception exception:)]] + [monad (#+ Monad do)] + ["ex" exception (#+ Exception exception:)] + [security + ["!" capability]]] [data - ["." error] - [text + ["." error (#+ Error)] + ["." text ("#/." hash) format ["." encoding]]] [world - ["." file (#+ File)] - [binary (#+ Binary)]]] + ["." file (#+ Path File)] + [binary (#+ Binary)]] + [type (#+ :share)]] ["." // (#+ Context Code) [// [archive @@ -48,60 +51,67 @@ Extension (format partial-host-extension lux-extension)) -(def: #export (file System<m> context module) - (All [m] (-> (file.System m) Context Module File)) +(def: #export (path system context module) + (All [m] (-> (file.System m) Context Module Path)) (|> module - (//.sanitize System<m>) - (format context (:: System<m> separator)))) + (//.sanitize system) + (format context (:: system separator)))) -(def: (find-source-file System<m> contexts module extension) +(def: (find-source-file monad system contexts module extension) (All [!] - (-> (file.System !) (List Context) Module Extension - (! (Maybe File)))) + (-> (Monad !) (file.System !) (List Context) Module Extension + (! (Error [Path (File !)])))) (case contexts #.Nil - (:: (:: System<m> &monad) wrap #.None) + (:: monad wrap (ex.throw ..cannot-find-module [module])) (#.Cons context contexts') - (do (:: System<m> &monad) - [#let [file (format (..file System<m> context module) extension)] - ? (file.exists? System<m> file)] - (if ? - (wrap (#.Some file)) - (find-source-file System<m> contexts' module extension))))) + (do monad + [#let [path (format (..path system context module) extension)] + file (!.use (:: system file) path)] + (case file + (#error.Success file) + (wrap (#error.Success [path file])) -(def: (try System<m> computations exception message) - (All [m a e] (-> (file.System m) (List (m (Maybe a))) (Exception e) e (m a))) - (case computations - #.Nil - (:: System<m> throw exception message) + (#error.Failure error) + (find-source-file monad system contexts' module extension))))) - (#.Cons computation computations') - (do (:: System<m> &monad) - [outcome computation] - (case outcome - (#.Some output) - (wrap output) +(def: #export (find-any-source-file monad system contexts module) + (All [!] + (-> (Monad !) (file.System !) (List Context) Module + (! (Error [Path (File !)])))) + (do monad + [outcome (find-source-file monad system contexts module ..full-host-extension)] + (case outcome + (#error.Success output) + (wrap outcome) - #.None - (try System<m> computations' exception message))))) + (#error.Failure error) + (find-source-file monad system contexts module ..lux-extension)))) -(def: #export (read System<m> contexts module) +(def: #export (read monad system contexts module) (All [!] - (-> (file.System !) (List Context) Module - (! Input))) - (let [find-source-file' (find-source-file System<m> contexts module)] - (do (:: System<m> &monad) - [file (try System<m> - (list (find-source-file' ..full-host-extension) - (find-source-file' ..lux-extension)) - ..cannot-find-module [module]) - binary (:: System<m> read file)] - (case (encoding.from-utf8 binary) - (#error.Success code) - (wrap {#////.module module - #////.file file - #////.code code}) - - (#error.Failure _) - (:: System<m> throw ..cannot-read-module [module]))))) + (-> (Monad !) (file.System !) (List Context) Module + (! (Error Input)))) + (do (error.with-error monad) + [## TODO: Get rid of both ":share"s ASAP + path,file (:share [!] + {(Monad !) + monad} + {(! (Error [Path (File !)])) + (find-any-source-file monad system contexts module)}) + #let [[path file] (:share [!] + {(Monad !) + monad} + {[Path (File !)] + path,file})] + binary (!.use (:: file content) [])] + (case (encoding.from-utf8 binary) + (#error.Success code) + (wrap {#////.module module + #////.file path + #////.hash (text/hash code) + #////.code code}) + + (#error.Failure _) + (:: monad wrap (ex.throw ..cannot-read-module [module]))))) |