aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser/module.clj
diff options
context:
space:
mode:
authorEduardo Julian2016-10-09 19:39:53 -0400
committerEduardo Julian2016-10-09 19:39:53 -0400
commite1b37ec360d39e218bc6b617ace23cd665d0189d (patch)
treec8671b5634b2eaf7e96da929eff21b8ba1f980fc /src/lux/analyser/module.clj
parentde60ed1439575ec99cb27e2bdd127a5957db07bc (diff)
- Now merging compiler-states pre-and-post module compilation.
- Added a temporary fix for the survival/accumulation of zombie type-vars.
Diffstat (limited to 'src/lux/analyser/module.clj')
-rw-r--r--src/lux/analyser/module.clj33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/lux/analyser/module.clj b/src/lux/analyser/module.clj
index a06988a3f..6af4adff6 100644
--- a/src/lux/analyser/module.clj
+++ b/src/lux/analyser/module.clj
@@ -43,8 +43,9 @@
))
;; [Exports]
-(defn add-import [module]
+(defn add-import
"(-> Text (Lux Null))"
+ [module]
(|do [current-module &/get-module-name]
(fn [state]
(if (&/|member? module (->> state (&/get$ &/$modules) (&/|get current-module) (&/get$ $imports)))
@@ -58,8 +59,9 @@
state)
nil)))))
-(defn set-imports [imports]
+(defn set-imports
"(-> (List Text) (Lux Null))"
+ [imports]
(|do [current-module &/get-module-name]
(fn [state]
(return* (&/update$ &/$modules
@@ -91,8 +93,9 @@
((&/fail-with-loc (str "[Analyser Error] Can't create a new global definition outside of a global environment: " module ";" name))
state))))
-(defn def-type [module name]
+(defn def-type
"(-> Text Text (Lux Type))"
+ [module name]
(fn [state]
(if-let [$module (->> state (&/get$ &/$modules) (&/|get module))]
(if-let [$def (->> $module (&/get$ $defs) (&/|get name))]
@@ -103,8 +106,9 @@
((&/fail-with-loc (str "[Analyser Error] Unknown module: " module))
state))))
-(defn type-def [module name]
+(defn type-def
"(-> Text Text (Lux [Bool Type]))"
+ [module name]
(fn [state]
(if-let [$module (->> state (&/get$ &/$modules) (&/|get module))]
(if-let [$def (->> $module (&/get$ $defs) (&/|get name))]
@@ -127,8 +131,9 @@
((&/fail-with-loc (str "[Analyser Error] Unknown module: " module))
state))))
-(defn exists? [name]
+(defn exists?
"(-> Text (Lux Bool))"
+ [name]
(fn [state]
(return* state
(->> state (&/get$ &/$modules) (&/|contains? name)))))
@@ -220,8 +225,9 @@
state))
)))
-(defn ensure-type-def [def-data]
+(defn ensure-type-def
"(-> DefData (Lux Type))"
+ [def-data]
(|let [[?type ?meta ?value] def-data]
(|case (&meta/meta-get &meta/type?-tag ?meta)
(&/$Some _)
@@ -235,8 +241,9 @@
(return true))
(return false))))
-(defn create-module [name hash]
+(defn create-module
"(-> Text Hash-Code (Lux Null))"
+ [name hash]
(fn [state]
(return* (->> state
(&/update$ &/$modules #(&/|put name (new-module hash) %))
@@ -244,8 +251,9 @@
nil)))
(do-template [<name> <tag> <type>]
- (defn <name> [module]
+ (defn <name>
<type>
+ [module]
(fn [state]
(if-let [=module (->> state (&/get$ &/$modules) (&/|get module))]
(return* state (&/get$ <tag> =module))
@@ -282,8 +290,9 @@
(str "[Analyser Error] Can't re-declare type: " (&/ident->text (&/T [module name]))))]
(return nil)))
-(defn declare-tags [module tag-names was-exported? type]
+(defn declare-tags
"(-> Text (List Text) Bool Type (Lux Null))"
+ [module tag-names was-exported? type]
(|do [_ (ensure-undeclared-tags module tag-names)
type-name (&type/type-name type)
:let [[_module _name] type-name]
@@ -309,8 +318,9 @@
((&/fail-with-loc (str "[Lux Error] Unknown module: " module))
state)))))
-(defn ensure-can-see-tag [module tag-name]
+(defn ensure-can-see-tag
"(-> Text Text (Lux Unit))"
+ [module tag-name]
(|do [current-module &/get-module-name]
(fn [state]
(if-let [=module (->> state (&/get$ &/$modules) (&/|get module))]
@@ -327,8 +337,9 @@
state)))))
(do-template [<name> <part> <doc>]
- (defn <name> [module tag-name]
+ (defn <name>
<doc>
+ [module tag-name]
(fn [state]
(if-let [=module (->> state (&/get$ &/$modules) (&/|get module))]
(if-let [^objects idx+tags+exported+type (&/|get tag-name (&/get$ $tags =module))]