diff options
author | Eduardo Julian | 2015-05-03 21:05:16 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-05-03 21:05:16 -0400 |
commit | fa251c2a22f004cd66461d2a8a101f2d88b15460 (patch) | |
tree | e79fb86ce9f7160de3d344933dd50090ee6fd41a /src/lux/analyser/module.clj | |
parent | 3e7a38713f26b16594c47ab4056eca38dd496622 (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.clj | 20 |
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))) |