From a6f04f38c0170e93e8f1ab2cfcde3cbf59f88b0b Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 17 Mar 2019 12:36:38 -0400 Subject: Added proper aliasing support to the new compiler. Also improved aliasing support in the old compiler.--- luxc/src/lux/analyser.clj | 8 ++++++++ luxc/src/lux/analyser/lux.clj | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'luxc') diff --git a/luxc/src/lux/analyser.clj b/luxc/src/lux/analyser.clj index 068a321d0..e272bcea4 100644 --- a/luxc/src/lux/analyser.clj +++ b/luxc/src/lux/analyser.clj @@ -136,6 +136,14 @@ (&/with-cursor cursor (&&lux/analyse-def analyse optimize eval! compile-def ?name ?value ?meta))) + "lux def alias" + (|let [(&/$Cons [_ (&/$Identifier "" ?alias)] + (&/$Cons [_ (&/$Identifier ?original)] + (&/$Nil) + )) parameters] + (&/with-cursor cursor + (&&lux/analyse-def-alias ?alias ?original))) + "lux program" (|let [(&/$Cons ?program (&/$Nil)) parameters] (&/with-cursor cursor diff --git a/luxc/src/lux/analyser/lux.clj b/luxc/src/lux/analyser/lux.clj index 236eb10a9..dc08ac765 100644 --- a/luxc/src/lux/analyser/lux.clj +++ b/luxc/src/lux/analyser/lux.clj @@ -559,6 +559,26 @@ _ &type/reset-mappings] (return &/$Nil))) +(def ^:private dummy-cursor + (&/T ["" -1 -1])) + +(defn ^:private alias-annotations [original-module original-name] + (&/T [dummy-cursor + (&/$Record (&/$Cons (&/T [(&/T [dummy-cursor (&/$Tag &&meta/alias-tag)]) + (&/T [dummy-cursor (&/$Identifier (&/T [original-module original-name]))])]) + &/$Nil))])) + +(defn analyse-def-alias [?alias ?original] + (|let [[r-module r-name] ?original] + (|do [[_ [original-type original-anns original-value]] (&&module/find-def! r-module r-name) + module-name &/get-module-name + _ (&/without-repl-closure + (&&module/define module-name ?alias + original-type + (alias-annotations r-module r-name) + original-value))] + (return &/$Nil)))) + (defn ^:private merge-module-states "(-> Host Host Host)" [new old] -- cgit v1.2.3