aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase/analysis/reference.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-01-11 02:53:52 -0400
committerEduardo Julian2020-01-11 02:53:52 -0400
commit8ebf2d5b9d368338b2be1fa53042c84a6f8ef682 (patch)
treeeb8e4d21be967507da72fb3cbd49da7d936f93c8 /stdlib/source/lux/tool/compiler/phase/analysis/reference.lux
parentcf9e65352cb477982754c98fafe0a3a98a42670d (diff)
Re-located code related to Lux's compilation across the different phases.
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase/analysis/reference.lux')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/analysis/reference.lux82
1 files changed, 0 insertions, 82 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/analysis/reference.lux b/stdlib/source/lux/tool/compiler/phase/analysis/reference.lux
deleted file mode 100644
index 6a5c4f889..000000000
--- a/stdlib/source/lux/tool/compiler/phase/analysis/reference.lux
+++ /dev/null
@@ -1,82 +0,0 @@
-(.module:
- [lux #*
- [abstract
- monad]
- [control
- ["." exception (#+ exception:)]]
- ["." macro]
- [data
- ["." text ("#@." equivalence)
- ["%" format (#+ format)]]]]
- ["." // #_
- ["#." scope]
- ["#." type]
- ["#/" //
- ["#." extension]
- ["#/" // #_
- ["#." reference]
- ["/" analysis (#+ Analysis Operation)]]]])
-
-(exception: #export (foreign-module-has-not-been-imported {current Text} {foreign Text})
- (exception.report
- ["Current" current]
- ["Foreign" foreign]))
-
-(exception: #export (definition-has-not-been-exported {definition Name})
- (exception.report
- ["Definition" (%.name definition)]))
-
-(def: (definition def-name)
- (-> Name (Operation Analysis))
- (with-expansions [<return> (wrap (|> def-name ////reference.constant #/.Reference))]
- (do ///.monad
- [constant (///extension.lift (macro.find-def def-name))]
- (case constant
- (#.Left real-def-name)
- (definition real-def-name)
-
- (#.Right [exported? actualT def-anns _])
- (do @
- [_ (//type.infer actualT)
- (^@ def-name [::module ::name]) (///extension.lift (macro.normalize def-name))
- current (///extension.lift macro.current-module-name)]
- (if (text@= current ::module)
- <return>
- (if exported?
- (do @
- [imported! (///extension.lift (macro.imported-by? ::module current))]
- (if imported!
- <return>
- (/.throw foreign-module-has-not-been-imported [current ::module])))
- (/.throw definition-has-not-been-exported def-name))))))))
-
-(def: (variable var-name)
- (-> Text (Operation (Maybe Analysis)))
- (do ///.monad
- [?var (//scope.find var-name)]
- (case ?var
- (#.Some [actualT ref])
- (do @
- [_ (//type.infer actualT)]
- (wrap (#.Some (|> ref ////reference.variable #/.Reference))))
-
- #.None
- (wrap #.None))))
-
-(def: #export (reference reference)
- (-> Name (Operation Analysis))
- (case reference
- ["" simple-name]
- (do ///.monad
- [?var (variable simple-name)]
- (case ?var
- (#.Some varA)
- (wrap varA)
-
- #.None
- (do @
- [this-module (///extension.lift macro.current-module-name)]
- (definition [this-module simple-name]))))
-
- _
- (definition reference)))