From 94e5a6b6ce7ad4b103e9d55c1aad2bd376f5da67 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 17 Oct 2019 20:51:39 -0400 Subject: FIX old compiler could allow aliases to be defined more than once --- luxc/src/lux/analyser/lux.clj | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'luxc/src') 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)))) -- cgit v1.2.3