aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser/module.clj
diff options
context:
space:
mode:
authorEduardo Julian2015-05-03 21:05:16 -0400
committerEduardo Julian2015-05-03 21:05:16 -0400
commitfa251c2a22f004cd66461d2a8a101f2d88b15460 (patch)
treee79fb86ce9f7160de3d344933dd50090ee6fd41a /src/lux/analyser/module.clj
parent3e7a38713f26b16594c47ab4056eca38dd496622 (diff)
- Added def-aliasing.
- | and & now normalize their slot-names. - Added several implementations of Eq, Ord & Show.
Diffstat (limited to 'src/lux/analyser/module.clj')
-rw-r--r--src/lux/analyser/module.clj20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lux/analyser/module.clj b/src/lux/analyser/module.clj
index d2e0a745b..6e42a56f7 100644
--- a/src/lux/analyser/module.clj
+++ b/src/lux/analyser/module.clj
@@ -30,6 +30,26 @@
[_]
(fail* "[Analyser Error] Can't create a new global definition outside of a global environment."))))
+(defn def-alias [a-module a-name r-module r-name]
+ (fn [state]
+ (matchv ::M/objects [(&/get$ &/$ENVS state)]
+ [["lux;Cons" [?env ["lux;Nil" _]]]]
+ (return* (->> state
+ (&/update$ &/$MODULES (fn [ms]
+ (&/|update a-module #(&/|put a-name (&/V "lux;AliasD" (&/T r-module r-name)) %)
+ ms)))
+ (&/set$ &/$ENVS (&/|list (&/update$ &/$LOCALS (fn [locals]
+ (&/update$ &/$MAPPINGS (fn [mappings]
+ (&/|put (str "" &/+name-separator+ name)
+ (&/T (&/V "global" (&/T r-module r-name)) &type/$Void)
+ mappings))
+ locals))
+ ?env))))
+ nil)
+
+ [_]
+ (fail* "[Analyser Error] Can't alias a global definition outside of a global environment."))))
+
(defn exists? [name]
(fn [state]
;; (prn `exists? name (->> state (&/get$ &/$MODULES) (&/|contains? name)))