diff options
Diffstat (limited to 'stdlib/source/lux/tool/compiler/language/lux/generation.lux')
-rw-r--r-- | stdlib/source/lux/tool/compiler/language/lux/generation.lux | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/stdlib/source/lux/tool/compiler/language/lux/generation.lux b/stdlib/source/lux/tool/compiler/language/lux/generation.lux index 1cfd7db0f..84f4f35d4 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/generation.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/generation.lux @@ -4,7 +4,8 @@ [monad (#+ do)]] [control ["." try (#+ Try)] - ["." exception (#+ exception:)]] + ["." exception (#+ exception:)] + ["." function]] [data ["." product] ["." name ("#@." equivalence)] @@ -146,6 +147,11 @@ (-> Text (Operation anchor expression directive Text))) (:: phase.monad map (|>> %.nat (format prefix)) ..next)) +(def: #export (enter-module module) + (All [anchor expression directive] + (-> Module (Operation anchor expression directive Any))) + (extension.update (set@ #module module))) + (template [<name> <inputT>] [(def: #export (<name> label code) (All [anchor expression directive] @@ -200,9 +206,12 @@ (#try.Success [[bundle (set@ #registry registry' state)] id])))) -(exception: #export (unknown-definition {name Name}) +(exception: #export (unknown-definition {name Name} + {known-definitions (List Text)}) (exception.report - ["Name" (%.name name)])) + ["Definition" (name.short name)] + ["Module" (name.module name)] + ["Known Definitions" (exception.enumerate function.identity known-definitions)])) (def: #export (remember archive name) (All [anchor expression directive] @@ -217,7 +226,7 @@ (#try.Success (get@ #descriptor.registry descriptor))))] (case (artifact.remember _name registry) #.None - (exception.throw ..unknown-definition name) + (exception.throw ..unknown-definition [name (artifact.definitions registry)]) (#.Some id) (#try.Success [stateE [_module id]])))))) |