diff options
author | Eduardo Julian | 2019-03-17 12:36:38 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-03-17 12:36:38 -0400 |
commit | a6f04f38c0170e93e8f1ab2cfcde3cbf59f88b0b (patch) | |
tree | 67e4c943658b13e3483db6de1a6fab2242fa03fb /luxc/src/lux | |
parent | e9403bb6364152af447080d41a35891f8d75ff30 (diff) |
Added proper aliasing support to the new compiler.
Also improved aliasing support in the old compiler.
Diffstat (limited to 'luxc/src/lux')
-rw-r--r-- | luxc/src/lux/analyser.clj | 8 | ||||
-rw-r--r-- | luxc/src/lux/analyser/lux.clj | 20 |
2 files changed, 28 insertions, 0 deletions
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] |