diff options
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase/analysis/module.lux')
-rw-r--r-- | stdlib/source/lux/tool/compiler/phase/analysis/module.lux | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/analysis/module.lux b/stdlib/source/lux/tool/compiler/phase/analysis/module.lux index cc7c857a0..0d69f524c 100644 --- a/stdlib/source/lux/tool/compiler/phase/analysis/module.lux +++ b/stdlib/source/lux/tool/compiler/phase/analysis/module.lux @@ -5,11 +5,11 @@ ["ex" exception (#+ exception:)] pipe] [data - ["." text ("#;." equivalence) + ["." text ("#@." equivalence) format] ["." error] [collection - ["." list ("#;." fold functor)] + ["." list ("#@." fold functor)] [dictionary ["." plist]]]] ["." macro]] @@ -86,7 +86,11 @@ [self-name macro.current-module-name] (function (_ state) (#error.Success [(update@ #.modules - (plist.update self-name (update@ #.imports (|>> (#.Cons module)))) + (plist.update self-name (update@ #.imports (function (_ current) + (if (list.any? (text@= module) + current) + current + (#.Cons module current))))) state) []]))))) @@ -236,16 +240,16 @@ (///.throw cannot-declare-tags-for-unnamed-type [tags type])) _ (ensure-undeclared-tags self-name tags) _ (///.assert cannot-declare-tags-for-foreign-type [tags type] - (text;= self-name type-module))] + (text@= self-name type-module))] (///extension.lift (function (_ state) (case (|> state (get@ #.modules) (plist.get self-name)) (#.Some module) - (let [namespaced-tags (list;map (|>> [self-name]) tags)] + (let [namespaced-tags (list@map (|>> [self-name]) tags)] (#error.Success [(update@ #.modules (plist.update self-name (|>> (update@ #.tags (function (_ tag-bindings) - (list;fold (function (_ [idx tag] table) + (list@fold (function (_ [idx tag] table) (plist.put tag [idx namespaced-tags exported? type] table)) tag-bindings (list.enumerate tags)))) |