diff options
author | Eduardo Julian | 2019-10-17 20:51:39 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-10-17 20:51:39 -0400 |
commit | 94e5a6b6ce7ad4b103e9d55c1aad2bd376f5da67 (patch) | |
tree | 974e189415868dc8feb6fb151ae07ab6e594e24f /luxc | |
parent | 299908a885d00ec735070a937f9720410fe224a9 (diff) |
FIX old compiler could allow aliases to be defined more than once
Diffstat (limited to 'luxc')
-rw-r--r-- | luxc/src/lux/analyser/lux.clj | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/luxc/src/lux/analyser/lux.clj b/luxc/src/lux/analyser/lux.clj index eb412bf0c..fee56b624 100644 --- a/luxc/src/lux/analyser/lux.clj +++ b/luxc/src/lux/analyser/lux.clj @@ -541,12 +541,15 @@ (|do [output (analyse-function** analyse exo-type ?self ?arg ?body)] (return (&/|list output)))) +(defn ^:private ensure-undefined! [module-name local-name] + (|do [verdict (&&module/defined? module-name local-name)] + (&/assert! (not verdict) + (str "[Analyser Error] Cannot re-define " module-name &/+name-separator+ local-name)))) + (defn analyse-def* [analyse optimize eval! compile-def ?name ?value ?meta exported? & [?expected-type]] (|do [_ &/ensure-directive module-name &/get-module-name - ? (&&module/defined? module-name ?name) - _ (&/assert! (not ?) - (str "[Analyser Error] Cannot re-define " (str module-name &/+name-separator+ ?name))) + _ (ensure-undefined! module-name ?name) =value (&/without-repl-closure (&/with-scope ?name (if ?expected-type @@ -580,8 +583,9 @@ (defn analyse-def-alias [?alias ?original] (|let [[r-module r-name] ?original] - (|do [_ (&&module/find-def r-module r-name) - module-name &/get-module-name + (|do [module-name &/get-module-name + _ (ensure-undefined! module-name ?alias) + _ (&&module/find-def r-module r-name) _ (&/without-repl-closure (&&module/define-alias module-name ?alias ?original))] (return &/$Nil)))) |