aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase/extension/statement.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase/extension/statement.lux')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/extension/statement.lux24
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))
_