diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/tool/compiler/phase/extension/statement.lux | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/extension/statement.lux b/stdlib/source/lux/tool/compiler/phase/extension/statement.lux index e36af0de6..e8910a3fb 100644 --- a/stdlib/source/lux/tool/compiler/phase/extension/statement.lux +++ b/stdlib/source/lux/tool/compiler/phase/extension/statement.lux @@ -11,6 +11,7 @@ ["." list ("#;." functor)] ["." dictionary]]] ["." macro + ["." code] ["s" syntax (#+ Syntax)]] [type (#+ :share :by-example) ["." check]]] @@ -145,12 +146,6 @@ _ (///.throw //.invalid-syntax [extension-name])))) -(def: (alias! alias def-name) - (-> Text Name (////analysis.Operation Any)) - (do ///.monad - [definition (//.lift (macro.find-def def-name))] - (module.define alias definition))) - (def: imports (Syntax (List Import)) (|> (s.tuple (p.and s.text s.text)) @@ -187,6 +182,21 @@ _ (///.throw //.invalid-syntax [extension-name])))) +## TODO: Reify aliasing as a feature of the compiler, instead of +## manifesting it implicitly through definition annotations. +(def: (alias-annotations original) + (-> Name Code) + (` {#.alias (~ (code.identifier original))})) + +(def: (define-alias alias original) + (-> Text Name (////analysis.Operation Any)) + (do ///.monad + [[original-type original-annotations original-value] + (//.lift (macro.find-def original))] + (module.define alias [original-type + (alias-annotations original) + original-value]))) + (def: def::alias Handler (function (_ extension-name phase inputsC+) @@ -196,7 +206,7 @@ [_ (//.lift (///.sub [(get@ [#////statement.analysis #////statement.state]) (set@ [#////statement.analysis #////statement.state])] - (alias! alias def-name)))] + (define-alias alias def-name)))] (wrap ////statement.no-requirements)) _ |